Restructure repository to include all source folders

Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-29 20:17:20 +09:00
parent 5d3cd64a25
commit dd97ddec92
11602 changed files with 1446576 additions and 0 deletions

View File

@@ -0,0 +1,911 @@
// ChattingPage.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
//
#include "stdafx.h"
#include "MonitoringTool.h"
#include "MonitoringToolDlg.h"
#include "ChattingPage.h"
#include "GlobalFunc.h"
#include "ChatServerEventHandler.h"
#include "MonitoringToolSetup.h"
#include "MonitoringToolLog.h"
#include "MonitoringToolSetup.h"
#include "LoginDlg.h"
#include "WhisperDlg.h"
#include <Network/Packet/PacketStruct/CharCommunityPacket.h>
#include <Network/Packet/PacketStruct/ServerInfo.h>
#include <UserManage/UserStatistics.h>
#include <Utility/Setup/ServerSetup.h>
#include <Log/ServerLog.h>
#include ".\chattingpage.h"
// CChattingPage <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
IMPLEMENT_DYNAMIC(CChattingPage, CPropertyPage)
CChattingPage::CChattingPage()
: CPropertyPage(CChattingPage::IDD)
, m_bAutoScroll(TRUE)
, m_sChatMessageLines(0)
, m_nMaxGroup(0)
, m_dwAccountDlgID(0)
, m_usLocalLang(0xFFFF)
{
m_lpWhisperDlg = NULL;
theApp.RegisterWindow(IDD_CHATTINGPAGE, static_cast<CWnd*>(this));
}
CChattingPage::~CChattingPage()
{
theApp.RemoveWindow(IDD_CHATTINGPAGE);
}
void CChattingPage::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHATMONITOR_LIST, m_ctrlChatMonitorList);
DDX_Control(pDX, IDC_SERVERGROUP_LIST, m_ctrlServerGroupCbList);
DDX_Control(pDX, IDC_CHATTYPE_LIST, m_ctrlChatTypeList);
DDX_Control(pDX, IDC_CONNECTION_LIST, m_ctrlConnectionList);
DDX_Control(pDX, IDC_CHATTYPE_CB, m_ctrlChatTypeCb);
DDX_Control(pDX, IDC_SERVERGROUP_CB, m_ctrlServerGroupCb);
DDX_Check(pDX, IDC_AUTOSCROLL_CHK, m_bAutoScroll);
DDX_Text(pDX, IDC_CHATLINES_EDIT, m_sChatMessageLines);
DDX_Control(pDX, IDC_USERSTAT_LIST, m_ctrlUserStatList);
}
BEGIN_MESSAGE_MAP(CChattingPage, CPropertyPage)
ON_LBN_SELCHANGE(IDC_CHATTYPE_LIST, OnLbnSelchangeOpt)
ON_LBN_SELCHANGE(IDC_SERVERGROUP_LIST, OnLbnSelchangeOpt)
ON_BN_CLICKED(IDC_CHATMSG_SEND_BTN, OnBnClickedChatmsgSendBtn)
ON_BN_CLICKED(IDC_AUTOSCROLL_CHK, OnBnClickedAutoscrollChk)
ON_BN_CLICKED(IDC_DELETECHATMSG_BTN, OnBnClickedDeletechatmsgBtn)
ON_BN_CLICKED(IDC_CHATLOGFLUSH_BTN, OnBnClickedChatlogflushBtn)
ON_BN_CLICKED(IDC_AUTH_MANAGER_BTN, OnBnClickedAuthManagerBtn)
ON_BN_CLICKED(IDC_FLUSH_STATLOG_BTN, OnBnClickedFlushStatlogBtn)
ON_LBN_DBLCLK(IDC_CHATMONITOR_LIST, OnLbnDblclkChatmonitorList)
ON_BN_CLICKED(IDC_CALL_WHISPER_DLG, OnBnClickedCallWhisperDlg)
ON_BN_CLICKED(IDC_GMLOGINED_CHK, OnBnClickedGmloginedChk)
ON_BN_CLICKED(IDC_LANGTYPE_CHK, OnBnClickedLangtypeChk)
ON_WM_SIZE()
END_MESSAGE_MAP()
// CChattingPage <20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
BOOL CChattingPage::OnInitDialog()
{
CPropertyPage::OnInitDialog();
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
const unsigned int nMaxZone = Setup.GetInt(_T("ZONE_INFO"), _T("ZONE_NUM"));
m_nMaxGroup = Setup.GetInt(_T("SERVER_GROUP_INFO"), _T("SERVER_GROUP_NUM"));
unsigned int nMaxChannel = Setup.GetInt(_T("CHANNEL_INFO"), _T("CHANNEL_NUM"));
SetServerListBox(m_ctrlServerGroupCbList);
SetChatTypeListBox(m_ctrlChatTypeList);
SetSendChatTypeCombo(m_ctrlChatTypeCb);
SetServerGroupCombo(m_ctrlServerGroupCb);
for(int nIndex = 0; nIndex < m_ctrlServerGroupCbList.GetCount(); ++nIndex)
m_ctrlServerGroupCbList.SetSel(nIndex);
for(int nIndex = 0; nIndex < m_ctrlChatTypeList.GetCount(); ++nIndex)
m_ctrlChatTypeList.SetSel(nIndex);
char szKey[256];
CString strFormat;
m_strLoginedName = "";
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ <20>ʱ<EFBFBD>ȭ
m_ctrlUserStatList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_FLATSB);
m_ctrlUserStatList.InsertColumn(0, _T("Z:00 C:00"), LVCFMT_CENTER, 73);
for(unsigned int nIndex = 0; nIndex < m_nMaxGroup; ++nIndex)
{
_snprintf(szKey, 256, "SERVER_GROUP_NAME_%02d", nIndex);
strFormat.Format(_T("%s"), Setup.GetString(_T("SERVER_GROUP_INFO"), szKey, _T("?")));
m_ctrlUserStatList.InsertColumn(nIndex + 1, strFormat, LVCFMT_RIGHT, 61);
}
SetDlgItemText(IDC_STRING001_STATIC, GetMyINIString("LOCAL_STRING", "STRING_001"));
SetDlgItemText(IDC_STRING002_STATIC, GetMyINIString("LOCAL_STRING", "STRING_002"));
SetDlgItemText(IDC_AUTOSCROLL_CHK, GetMyINIString("LOCAL_STRING", "STRING_003"));
SetDlgItemText(IDC_CHATLOGFLUSH_BTN, GetMyINIString("LOCAL_STRING", "STRING_004"));
SetDlgItemText(IDC_DELETECHATMSG_BTN, GetMyINIString("LOCAL_STRING", "STRING_005"));
SetDlgItemText(IDC_STRING006_STATIC, GetMyINIString("LOCAL_STRING", "STRING_006"));
SetDlgItemText(IDC_STRING007_STATIC, GetMyINIString("LOCAL_STRING", "STRING_007"));
SetDlgItemText(IDC_STRING007_STATIC2, GetMyINIString("LOCAL_STRING", "STRING_007"));
SetDlgItemText(IDC_STRING008_STATIC, GetMyINIString("LOCAL_STRING", "STRING_008"));
SetDlgItemText(IDC_STRING008_STATIC2, GetMyINIString("LOCAL_STRING", "STRING_008"));
SetDlgItemText(IDC_STRING009_STATIC, GetMyINIString("LOCAL_STRING", "STRING_009"));
SetDlgItemText(IDC_STRING010_STATIC, GetMyINIString("LOCAL_STRING", "STRING_010"));
SetDlgItemText(IDC_FLUSH_STATLOG_BTN, GetMyINIString("LOCAL_STRING", "STRING_011"));
SetDlgItemText(IDC_STRING012_STATIC, GetMyINIString("LOCAL_STRING", "STRING_012"));
SetDlgItemText(IDC_AUTH_MANAGER_BTN, GetMyINIString("LOCAL_STRING", "STRING_013"));
SetDlgItemText(IDC_STRING016_STATIC, GetMyINIString("LOCAL_STRING", "STRING_016"));
SetDlgItemText(IDC_CHATMSG_SEND_BTN, GetMyINIString("LOCAL_STRING", "STRING_017"));
SetDlgItemText(IDC_CALL_WHISPER_DLG, GetMyINIString("LOCAL_STRING", "STRING_023"));
SetDlgItemText(IDC_LOGINEDNAME_STATIC, GetMyINIString("LOCAL_STRING", "STRING_047"));
SetDlgItemText(IDC_GMLOGINED_CHK, GetMyINIString("LOCAL_STRING", "STRING_048"));
SetDlgItemText(IDC_LANGTYPE_CHK, GetMyINIString("LOCAL_STRING", "STRING_049"));
// <20><><EFBFBD><EFBFBD><EFBFBD>α<EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD> <20>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD>
CString strColumnName;
strColumnName.Format(_T("WriteTime\tGroupIndex"));
for (unsigned int nZone = 0; nZone < nMaxZone; ++nZone)
{
_snprintf(szKey, MAX_PATH, _T("ZONE_INDEX_%02d"), nZone);
for (unsigned int nCH = 0; nCH < nMaxChannel; ++nCH)
{
strColumnName.AppendFormat(_T("\tZ:%02d C:%02d"),
Setup.GetInt(_T("ZONE_INFO"), szKey, 100), nCH + 1);
}
}
strColumnName.Append(_T("\r\n"));
CMonitoringToolLog::GetInstance().WriteUserStatLog(strColumnName);
return TRUE;
}
const unsigned short ALLOW_LETTER_NUM = 33;
const char AllowLetters[ALLOW_LETTER_NUM] = {
' ', '`', '~', '!', '@', '#', '$', '%', '^', '&',
'*', '(', ')', '-', '=', '_', '+', '{', '}', '|',
'[', ']', '\\', ';', '\'', ':', '\"', '<', '>', '?',
',', '.', '/'
};
BOOL CChattingPage::CheckCharSet(CHAR* str, int Len)
{
int ACount = 0;
// <20><><EFBFBD><20>Է°<D4B7><C2B0><EFBFBD>
for(unsigned short LCount = 0; LCount < Len; LCount++)
{
// 2<><32><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
if((str[LCount] & 0x80))
return TRUE;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if((str[LCount] >= 'A' && str[LCount] <= 'Z') ||
(str[LCount] >= 'a' && str[LCount] <= 'z'))
{
continue;
}
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
if(str[LCount] >= '0' && str[LCount] <= '9')
{
continue;
}
// Ư<><C6AF> <20><>ȣ <20>κ<EFBFBD> <20><><EFBFBD><EFBFBD>
for(ACount = 0; ACount < ALLOW_LETTER_NUM; ACount++)
{
if(str[LCount] == AllowLetters[ACount])
{
break;
}
}
if(ACount == ALLOW_LETTER_NUM)
{
return TRUE;
}
}
return FALSE;
}
BOOL CChattingPage::CheckAisaLang(unsigned short usLang)
{
switch(usLang)
{
case LANG_JAPANESE: // <20>Ϻ<EFBFBD><CFBA><EFBFBD>
case LANG_KOREAN: // <20>ѱ<EFBFBD><D1B1><EFBFBD>
case LANG_CHINESE: // <20>߱<EFBFBD><DFB1><EFBFBD>
case LANG_THAI: // <20>±<EFBFBD><C2B1><EFBFBD>
return TRUE;
}
return FALSE;
}
void CChattingPage::AddLineToChatMonitorList(unsigned char cChatType, unsigned short usLang, char* szMsg, bool bIsCall)
{
CXListBox::Color cBackColor = CXListBox::BackColor;
CXListBox::Color cMessageColor = CXListBox::ChatNormal;
if (false == bIsCall)
{
switch(cChatType)
{
case PktChat::NORMAL:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatNormal;
break;
case PktChat::PARTY:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatParty;
break;
case PktChat::FRIEND:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatFriend;
break;
case PktChat::GUILD:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatGuild;
break;
case PktChat::CLIENT_LOG:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatNormal;
break;
case PktChat::STALL:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatStall;
break;
case PktChat::SHOUT:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatShout;
break;
case PktChat::ADMIN_NORMAL_CHAT:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatAdminNormal;
break;
case PktChat::ADMIN_SHOUT:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatAdminShout;
break;
case PktChat::WHISPER:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatWhisper;
break;
case PktChat::TRADE:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatTrade;
break;
case PktChat::NOTICE:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatNotice;
break;
case PktChat::DICE:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::ChatAdminShout;
break;
case PktChat::GMREPORT:
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::GMReport;
break;
}
}
else
{
cBackColor = CXListBox::BackColor; cMessageColor = CXListBox::Call;
}
if (m_ctrlChatMonitorList.GetCount() > 5000)
{
//m_ctrlChatMonitorList.DeleteString(0);
m_ctrlChatMonitorList.ResetContent();
}
#ifdef NO_WHISPER
if(cChatType != PktChat::WHISPER)
#endif
{
m_sChatMessageLines = (unsigned long)m_ctrlChatMonitorList.GetCount();
m_ctrlChatMonitorList.AddLine(cMessageColor, cBackColor, szMsg, m_bAutoScroll);
}
UpdateData(false);
}
/// \brief ä<><C3A4><EFBFBD><EFBFBD>Ŷ<EFBFBD><C5B6> <20>Ľ<EFBFBD><C4BD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><>ũ<EFBFBD><C5A9>(m_ctrlChatMonitorList)<29><> <20><><EFBFBD><EFBFBD>
/// \param lpChatData ä<><C3A4> <20><>Ŷ
/// \param bIsCall <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD> <20><><EFBFBD><EFBFBD>
/// \note <20><><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD> <20><>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> Ư<><C6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ŭ<EFBFBD><C5AC><EFBFBD>ϸ<EFBFBD> <20><>ȭâ<C8AD><C3A2> <20>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> SetItemData<74><61> UID<49><44> <20><><EFBFBD><EFBFBD>
void CChattingPage::ParseChatData(ChatToolPkt::ChatDataSend* lpChatData, bool bIsCall, bool bGMSender)
{
const int MAX_CHAT_LEN = 1024;
char strChatMsg[MAX_CHAT_LEN];
char strRecvMsg[UCHAR_MAX * 2];
char strRace[4][4] = {"N/A", "H", "A", "N/A"};
SERVER_ID serverID;
serverID.dwID = lpChatData->m_dwServerID;
if (0 != lpChatData)
{
time_t tCurrent = time(NULL);
struct tm tmCurrent = *localtime(&tCurrent);
memcpy(strRecvMsg, reinterpret_cast<char*>(lpChatData + 1), lpChatData->m_cChatMsgLen);
strRecvMsg[lpChatData->m_cChatMsgLen] = 0;
if (PktChat::WHISPER == lpChatData->m_cChatType)
{
/////////////////////////////////////////////////////////////////////////////////////////////
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӼӸ<D3BC><D3B8><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ӼӸ<D3BC><D3B8><EFBFBD> ó<><C3B3><EFBFBD>ϰ<EFBFBD> <20>Ѵ<EFBFBD>.
if(bIsCall)
{
unsigned long dwUID = lpChatData->m_dwUID;
unsigned long dwCID = lpChatData->m_dwCID;
CWhisperDlg::WhisperDlgInfo stInfo;
ZeroMemory(&stInfo, sizeof(CWhisperDlg::WhisperDlgInfo));
stInfo.m_nDlgType = CWhisperDlg::WhisperDlgInfo::DLG_TYPE::WHISPER_TYPE_CLK;
stInfo.m_dwUID = dwUID;
stInfo.m_dwCID = dwCID;
stInfo.m_cRace = lpChatData->m_cRace;
strncpy(stInfo.m_szServerName, theApp.GetServerName((unsigned int)serverID.GetGroup()), CWhisperDlg::WhisperDlgInfo::MAX_NAME);
if(!bGMSender)
strncpy(stInfo.m_szCharName, lpChatData->m_szSenderName, CWhisperDlg::WhisperDlgInfo::MAX_NAME);
else
strncpy(stInfo.m_szCharName, lpChatData->m_szTargetName, CWhisperDlg::WhisperDlgInfo::MAX_NAME);
// <20>̹<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
WhisperDlgMap::iterator find = m_WhisperDlgMap.find(dwUID);
if (find != m_WhisperDlgMap.end())
{
(find->second)->SetFocus();
}
else
{
// <20><> <20><>ȭ <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD> â <20><><EFBFBD><EFBFBD>
m_lpWhisperDlg = new CWhisperDlg(this, stInfo);
m_lpWhisperDlg->Create(IDD_WHISPERDLG,this);
m_lpWhisperDlg->ShowWindow(SW_SHOW);
// <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_WhisperDlgMap.insert(WhisperDlgMap::value_type(dwUID, m_lpWhisperDlg));
m_lpWhisperDlg->ParseChatData(lpChatData);
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
_snprintf(strChatMsg, MAX_CHAT_LEN - 1, "%s\t [Z:%02d/C:%d/L:%04x][%02d:%02d][R:%s] %s : %s (To: %s)",
theApp.GetServerName((unsigned int)serverID.GetGroup()),
serverID.GetZone(), serverID.GetChannel(), lpChatData->m_usLang, tmCurrent.tm_hour, tmCurrent.tm_min, strRace[lpChatData->m_cRace],
lpChatData->m_szSenderName, strRecvMsg, lpChatData->m_szTargetName);
}
else if (PktChat::DICE == lpChatData->m_cChatType)
{
char strID[32];
int iMax, iCur;
sscanf(strRecvMsg, "%s %d %d", strID, &iMax, &iCur);
_snprintf(strChatMsg, MAX_CHAT_LEN - 1, "%s\t [Z:%02d/C:%d/L:%04x][%02d:%02d][R:%s] %s <20><><EFBFBD><EFBFBD> %d <20>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> %d <20><> <20><><EFBFBD>Խ<EFBFBD><D4BD>ϴ<EFBFBD>.",
theApp.GetServerName((unsigned int)serverID.GetGroup()),
serverID.GetZone(), serverID.GetChannel(), lpChatData->m_usLang, tmCurrent.tm_hour, tmCurrent.tm_min, strRace[lpChatData->m_cRace], strID, iMax, iCur);
}
else
{
_snprintf(strChatMsg, MAX_CHAT_LEN - 1, "%s\t [Z:%02d/C:%d/L:%04x][%02d:%02d][R:%s] %s",
theApp.GetServerName((unsigned int)serverID.GetGroup()),
serverID.GetZone(), serverID.GetChannel(), lpChatData->m_usLang, tmCurrent.tm_hour, tmCurrent.tm_min, strRace[lpChatData->m_cRace], strRecvMsg);
}
if(m_usLocalLang != 0xFFFF)
{
if(CheckCharSet(strRecvMsg, strlen(strRecvMsg)) // <20><>Ƽ<EFBFBD><C6BC><EFBFBD><EFBFBD>Ʈ <20><><EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>
&& CheckAisaLang(lpChatData->m_usLang)
&& lpChatData->m_usLang != m_usLocalLang) // <20><> <20><>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
return;
}
}
AddLineToChatMonitorList(lpChatData->m_cChatType, lpChatData->m_usLang, strChatMsg, bIsCall);
m_ctrlChatMonitorList.SetItemData(m_ctrlChatMonitorList.GetCount() - 1, lpChatData->m_dwUID);
m_CharacterID[lpChatData->m_dwUID] = lpChatData->m_dwCID;
}
}
void CChattingPage::OnLbnSelchangeOpt()
{
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
const char* szSection = _T("SERVER_GROUP_INFO");
char szKey[MAX_PATH];
// ä<><C3A4> <20><><EFBFBD>͸<EFBFBD> <20>ɼǿ<C9BC> <20><>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ ó<><C3B3>
// 1. <20><><EFBFBD>͸<EFBFBD> <20>ɼ<EFBFBD> <20><20>ʱ<EFBFBD>ȭ : <20>ʱⰪ<CAB1><E2B0AA> <20><20>ɼ<EFBFBD> <20><><EFBFBD><EFBFBD> ON!
unsigned char szOption[ChatToolPkt::ChatOption::MAX_OPTION];
std::fill_n(szOption, int(ChatToolPkt::ChatOption::MAX_OPTION), 1);
// 2. ä<><C3A4> Ÿ<><C5B8> <20><> <20><><EFBFBD>͸<EFBFBD> : <20><><EFBFBD>õǾ<C3B5> <20>ִ<EFBFBD> <20>ɼǸ<C9BC> ON
// (<28><>, <20><><EFBFBD><EFBFBD>Ʈ <20>ڽ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> DO_LISTEN(0)<29><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD>ǵ<EFBFBD> <20>ɼ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31> <20><><EFBFBD><EFBFBD>)
for(int nCurIndex = 0; nCurIndex < m_ctrlChatTypeList.GetCount(); ++nCurIndex)
{
if (0 != m_ctrlChatTypeList.GetSel(nCurIndex))
{
szOption[nCurIndex + 1] = 1; // <20><><EFBFBD>õ<EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> ON
}
else
{
szOption[nCurIndex + 1] = 0; // <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20>ɼ<EFBFBD> OFF
}
}
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>͸<EFBFBD> : <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DO_LISTEN <20>ɼ<EFBFBD><C9BC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD>!
unsigned int nMaxGroup = Setup.GetInt(szSection, "SERVER_GROUP_NUM");
for(unsigned int nIndex = 0; nIndex < nMaxGroup; ++nIndex)
{
_snprintf(szKey, MAX_PATH, _T("SERVER_GROUP_INDEX_%02d"), nIndex);
unsigned int nGroupIndex = Setup.GetInt(szSection, szKey, 100);
int nFind = m_ctrlServerGroupCbList.FindString(-1, theApp.GetServerName(nGroupIndex));
if (0 != m_ctrlServerGroupCbList.GetSel(nFind))
{
szOption[ChatToolPkt::ChatOption::DO_LISTEN] = 1; // <20><><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DO LISTEN
}
else
{
szOption[ChatToolPkt::ChatOption::DO_LISTEN] = 0; // <20><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DO NOT LISTEN
}
if (NULL != theApp.GetChatServerHandler(nGroupIndex))
{
ClientNet::CChatServerEventHandler::SendChatOptPkt(
nGroupIndex, szOption, ChatToolPkt::ChatOption::MAX_OPTION);
}
}
}
void CChattingPage::OnBnClickedChatmsgSendBtn()
{
if (false == theApp.IsAuthorized())
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_044"));
return;
}
CString strServerName, strChatType, strMsg;
unsigned int nChatType;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD>
GetDlgItemText(IDC_CHATMSG_EDIT, strMsg);
if(strMsg.GetLength() == 0)
return;
strMsg.Append(_T(" ")); // <20><> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>°<EFBFBD> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>;)
// <20><><EFBFBD><EFBFBD> <20>ӼӸ<D3BC> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if(strncmp("/s ", strMsg.GetString(), 3) == 0)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ӹ<EFBFBD><D3B8><EFBFBD> <20><><EFBFBD>ȴ<EFBFBD>.
CString strGMName;
strGMName = theApp.GetLoginedName(); // GM<47><4D>
char strTarget[32];
sscanf(strMsg.GetString(), "/s %s ", strTarget);
int Len = (int)strlen(strTarget)+4;
strMsg.Delete(0, Len);
unsigned long dwDlgID = GetAccountDlgID();
bool IsSended = false;
char szKey[256];
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
unsigned int nMaxGroupNum = Setup.GetInt(_T("SERVER_GROUP_INFO"), _T("SERVER_GROUP_NUM"));
for(int nIndex = 0; nIndex < (int)nMaxGroupNum; ++nIndex)
{
_snprintf(szKey, 256, "SERVER_GROUP_INDEX_%02d", nIndex);
unsigned int nServerGroup = Setup.GetInt("SERVER_GROUP_INFO", szKey);
IsSended = ClientNet::CChatServerEventHandler::SendChatReqPkt(
nServerGroup, PktChat::WHISPER,
ChatToolPkt::TARGET_CHARNAME, 0, 0, strGMName, strTarget, strMsg);
}
if(!IsSended)
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_026"));
return;
}
if (CB_ERR == m_ctrlChatTypeCb.GetCurSel()
|| CB_ERR == m_ctrlServerGroupCb.GetCurSel())
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_025"));
return;
}
// <20><><EFBFBD><EFBFBD> <20><>
m_ctrlServerGroupCb.GetLBText(m_ctrlServerGroupCb.GetCurSel(), strServerName);
// ä<><C3A4> Ÿ<><C5B8>
m_ctrlChatTypeCb.GetLBText(m_ctrlChatTypeCb.GetCurSel(), strChatType);
nChatType = GetChatTypeIndex(strChatType);
if (true == ClientNet::CChatServerEventHandler::SendChatReqPkt(
theApp.GetServerIndex(strServerName), nChatType,
ChatToolPkt::TARGET_CHARNAME, 0, 0, theApp.GetLoginedName(), _T(""), strMsg))
{
SetDlgItemText(IDC_CHATMSG_EDIT, _T(""));
}
else
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>޼<EFBFBD><DEBC><EFBFBD>
}
}
void CChattingPage::OnBnClickedAutoscrollChk()
{
if(m_bAutoScroll)
{
m_bAutoScroll = FALSE;
}
else
{
m_bAutoScroll = TRUE;
}
}
void CChattingPage::OnBnClickedDeletechatmsgBtn()
{
m_ctrlChatMonitorList.ResetContent();
}
void CChattingPage::OnBnClickedChatlogflushBtn()
{
CMonitoringToolLog::GetInstance().FlushChatLog();
}
void CChattingPage::SetManagerServerConnection()
{
CString strConnection;
if (NULL != theApp.GetManagerHandler())
{
strConnection = GetMyINIString("LOCAL_STRING", "STRING_027");
}
else
{
strConnection = GetMyINIString("LOCAL_STRING", "STRING_028");
}
SetDlgItemText(IDC_MANAGERSERVER_CON_EDIT, strConnection);
}
void CChattingPage::OnBnClickedAuthManagerBtn()
{
CLoginDlg dlg(CLoginDlg::MANAGER_SERVER);
dlg.DoModal();
}
void CChattingPage::SetUserStat()
{
m_ctrlUserStatList.DeleteAllItems();
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
unsigned int nMaxGroup = Setup.GetInt(_T("SERVER_GROUP_INFO"), _T("SERVER_GROUP_NUM"));
unsigned int nMaxZone = Setup.GetInt(_T("ZONE_INFO"), _T("ZONE_NUM"));
unsigned int nMaxChannel = Setup.GetInt(_T("CHANNEL_INFO"), _T("CHANNEL_NUM"));
CString strKey;
CString strUserNum;
CString strRowName;
for (unsigned int nZone = 0; nZone < nMaxZone; ++nZone)
{
for (unsigned int nCH = 0; nCH < nMaxChannel; ++nCH)
{
strKey.Format(_T("ZONE_INDEX_%02d"), nZone);
unsigned int nZoneIndex = Setup.GetInt(_T("ZONE_INFO"), strKey, 100);
strRowName.Format(_T("Z:%02d C:%02d"), nZoneIndex, nCH + 1);
m_ctrlUserStatList.InsertItem((nZone * nMaxChannel) + nCH, strRowName);
for (unsigned int nGroup = 0; nGroup < nMaxGroup; ++nGroup)
{
strKey.Format(_T("SERVER_GROUP_INDEX_%02d"), nGroup);
unsigned int nGroupIndex = Setup.GetInt(_T("SERVER_GROUP_INFO"), strKey, 100);
SERVER_ID serverID;
serverID.dwID = 0;
serverID.sID.ID = nZoneIndex;
serverID.sID.Group = nGroupIndex;
serverID.sID.Type = CServerSetup::GameServer;
serverID.sID.Channel = nCH;
strUserNum.Format(_T("%d"), CUserStatistics::GetInstance().GetUserNum(serverID.dwID));
m_ctrlUserStatList.SetItemText((nZone * nMaxChannel) + nCH, nGroup + 1, strUserNum);
}
}
}
unsigned int nTotalUserNum = 0;
int nRow = m_ctrlUserStatList.GetItemCount();
m_ctrlUserStatList.InsertItem(nRow, _T("SUM"));
for (unsigned int nGroup = 0; nGroup < nMaxGroup; ++nGroup)
{
strKey.Format(_T("SERVER_GROUP_INDEX_%02d"), nGroup);
unsigned int nGroupIndex = Setup.GetInt(_T("SERVER_GROUP_INFO"), strKey, 100);
nTotalUserNum += CUserStatistics::GetInstance().GetGroupUserNum(nGroupIndex);
strUserNum.Format(_T("%d"), CUserStatistics::GetInstance().GetGroupUserNum(nGroupIndex));
m_ctrlUserStatList.SetItemText(nRow, nGroup + 1, strUserNum);
}
SetDlgItemInt(IDC_TOTALUSERNUM_EDIT, nTotalUserNum, TRUE);
}
void CChattingPage::OnBnClickedFlushStatlogBtn()
{
CMonitoringToolLog::GetInstance().FlushStatLog();
}
void CChattingPage::OnLbnDblclkChatmonitorList()
{
if (0 > m_ctrlChatMonitorList.GetCurSel())
{
MessageBox(GetMyINIString("LOCAL_STRING", "STRING_024"));
return;
}
unsigned long dwUID =
static_cast<unsigned long>(m_ctrlChatMonitorList.GetItemData(m_ctrlChatMonitorList.GetCurSel()));
if (0 == dwUID)
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_029"));
return;
}
char szBuffer[256];
m_ctrlChatMonitorList.GetText(m_ctrlChatMonitorList.GetCurSel(), szBuffer);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ľ<EFBFBD><C4BD>Ͽ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
// ex) ServerName [Z:00][00:00][R:00] SenderName : Message (To: TargetName)
char* szServerName = strtok(szBuffer, " ");
strtok(NULL, "]");
strtok(NULL, "]");
char* szRace = strtok(NULL, "]");
char* szSenderName = strtok(NULL, " ");
TrimTab(szServerName, (int)strlen(szServerName)); // \t <20><><EFBFBD><EFBFBD>
if (0 == strcmp(szServerName, "UNKNOWN"))
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_029"));
return;
}
if (0 == szSenderName)
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_029"));
return;
}
CWhisperDlg::WhisperDlgInfo stInfo;
ZeroMemory(&stInfo, sizeof(CWhisperDlg::WhisperDlgInfo));
stInfo.m_nDlgType = CWhisperDlg::WhisperDlgInfo::DLG_TYPE::WHISPER_TYPE_CLK;
stInfo.m_dwUID = dwUID;
stInfo.m_dwCID = m_CharacterID[dwUID];
stInfo.m_cRace = 0;
if(szRace[3] == 'H')
stInfo.m_cRace = 1;
else if(szRace[3] == 'A')
stInfo.m_cRace = 2;
strncpy(stInfo.m_szServerName, szServerName, CWhisperDlg::WhisperDlgInfo::MAX_NAME);
strncpy(stInfo.m_szCharName, szSenderName, CWhisperDlg::WhisperDlgInfo::MAX_NAME);
// <20>̹<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
WhisperDlgMap::iterator find = m_WhisperDlgMap.find(dwUID);
if (find != m_WhisperDlgMap.end())
{
(find->second)->SetFocus();
return;
}
// <20><> <20><>ȭ <20><><EFBFBD>޸<EFBFBD><DEB8><EFBFBD> â <20><><EFBFBD><EFBFBD>
m_lpWhisperDlg = new CWhisperDlg(this, stInfo);
m_lpWhisperDlg->Create(IDD_WHISPERDLG,this);
m_lpWhisperDlg->ShowWindow(SW_SHOW);
// <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_WhisperDlgMap.insert(WhisperDlgMap::value_type(dwUID, m_lpWhisperDlg));
}
char* CChattingPage::TrimTab(char* szBuffer, int nSize)
{
char *temp = new char[nSize];
memset(temp, 0, nSize);
int j = 0;
for (int i=0; i < nSize; i++)
{
if (szBuffer[i] != '\t')
{
temp[j++] = szBuffer[i];
}
}
strcpy(szBuffer, temp);
delete temp;
return szBuffer;
}
void CChattingPage::OnBnClickedCallWhisperDlg()
{
if (false == theApp.IsAuthorized())
{
theApp.ReportResult(GetMyINIString("LOCAL_STRING", "STRING_044"));
return;
}
// <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> UID<49><44> <20><>ȭ â<><C3A2> <20><><EFBFBD><EFBFBD><EFB6A7> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID<49><44> <20>ӽ<EFBFBD>Ű<EFBFBD><C5B0> <20>ο<EFBFBD><CEBF>Ѵ<EFBFBD>.
// Ack<63><6B> <20>޴<EFBFBD> ID<49><44> â<><C3A2> ã<><C3A3> UID<49><44> <20><><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD> <20><><EFBFBD><EFBFBD>.
// <20>̹<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD><D6B4><EFBFBD> üũ
WhisperDlgMap::iterator find = m_AccountDlgMap.find(m_dwAccountDlgID);
if (find != m_AccountDlgMap.end())
{
(find->second)->SetFocus();
return;
}
// <20><><EFBFBD>ο<EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD> ID <20><><EFBFBD><EFBFBD>
++m_dwAccountDlgID;
CWhisperDlg::WhisperDlgInfo stInfo;
ZeroMemory(&stInfo, sizeof(CWhisperDlg::WhisperDlgInfo));
stInfo.m_nDlgType = CWhisperDlg::WhisperDlgInfo::DLG_TYPE::FINDUSER;
stInfo.m_dwUID = 0;
stInfo.m_dwDlgID = m_dwAccountDlgID;
m_lpWhisperDlg = new CWhisperDlg(this, stInfo);
m_lpWhisperDlg->Create(IDD_WHISPERDLG);
m_lpWhisperDlg->ShowWindow(SW_SHOW);
// <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD>
m_AccountDlgMap.insert(WhisperDlgMap::value_type(m_dwAccountDlgID, m_lpWhisperDlg));
}
CWhisperDlg* CChattingPage::GetWhisperDlg(unsigned long dwUID)
{
WhisperDlgMap::iterator find = m_WhisperDlgMap.find(dwUID);
if (find != m_WhisperDlgMap.end())
{
return find->second;
}
else
{
return NULL;
}
}
CWhisperDlg* CChattingPage::GetAccountDlg(unsigned long dwDlgID)
{
WhisperDlgMap::iterator find = m_AccountDlgMap.find(dwDlgID);
if (find != m_AccountDlgMap.end())
{
return find->second;
}
else
{
return NULL;
}
}
BOOL CChattingPage::PreTranslateMessage(MSG* pMsg)
{
if ((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_RETURN))
{
if ((pMsg->hwnd == GetDlgItem(IDC_CHATMSG_EDIT)->m_hWnd))
{
OnBnClickedChatmsgSendBtn();
}
}
return CPropertyPage::PreTranslateMessage(pMsg);
}
void CChattingPage::SetLoginedNameEdit(const CString& strLoginedName)
{
m_strLoginedName = strLoginedName;
SetDlgItemText(IDC_LOGINEDNAME_EDIT, strLoginedName);
}
void CChattingPage::OnBnClickedGmloginedChk()
{
if (true == theApp.IsAuthorized())
{
unsigned char cSendType = 0;
if (BST_CHECKED != IsDlgButtonChecked(IDC_GMLOGINED_CHK))
{
cSendType = ChatToolPkt::ChatAdminStatus::LOGOUT;
}
else
{
cSendType = ChatToolPkt::ChatAdminStatus::LOGIN;
}
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
char szKey[256];
for(int nIndex = 0; nIndex < (int)m_nMaxGroup; ++nIndex)
{
_snprintf(szKey, 256, "SERVER_GROUP_INDEX_%02d", nIndex);
unsigned int nServerGroup = Setup.GetInt("SERVER_GROUP_INFO", szKey);
if (false == ClientNet::CChatServerEventHandler::SendAdminStatus(nServerGroup, 0, cSendType))
{
ERRLOG3(g_Log, "ä<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> <20>α<EFBFBD><CEB1><EFBFBD>/<2F>ƿ<EFBFBD> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>׷<EFBFBD>: %d, GMName: %s, Type: %d",
nServerGroup, theApp.GetLoginedName(), cSendType);
}
}
}
}
void CChattingPage::OnBnClickedLangtypeChk()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if (true == theApp.IsAuthorized())
{
if (BST_CHECKED != IsDlgButtonChecked(IDC_LANGTYPE_CHK))
{
m_usLocalLang = 0xFFFF;
}
else
{
m_usLocalLang = PRIMARYLANGID(GetSystemDefaultLangID());
}
}
}
BOOL CChattingPage::DestroyWindow()
{
CMonitoringToolSetup Setup = CMonitoringToolSetup::GetInstance();
char szKey[256];
for(int nIndex = 0; nIndex < (int)m_nMaxGroup; ++nIndex)
{
_snprintf(szKey, 256, "SERVER_GROUP_INDEX_%02d", nIndex);
unsigned int nServerGroup = Setup.GetInt("SERVER_GROUP_INFO", szKey);
if (false == ClientNet::CChatServerEventHandler::SendAdminStatus(
nServerGroup, 0, ChatToolPkt::ChatAdminStatus::LOGOUT))
{
ERRLOG2(g_Log, "ä<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EEBFB5><EFBFBD><EFBFBD> <20>α׾ƿ<D7BE> <20><>Ŷ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>. <20>׷<EFBFBD>: %d, GMName: %s",
nServerGroup, theApp.GetLoginedName());
}
}
return CPropertyPage::DestroyWindow();
}
void CChattingPage::OnSize(UINT nType, int cx, int cy)
{
CPropertyPage::OnSize(nType, cx, cy);
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CRect rect, rectc;
GetClientRect(rect);
if(m_ctrlChatMonitorList.GetSafeHwnd())
{
m_ctrlChatMonitorList.GetWindowRect(rectc);
m_ctrlChatMonitorList.MoveWindow(350, 35, rect.Width()-350, rectc.Height());
}
}