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:
242
Server/Billing/한게임 통합빌링 테스트모듈/BillingTestModule.cpp
Normal file
242
Server/Billing/한게임 통합빌링 테스트모듈/BillingTestModule.cpp
Normal file
@@ -0,0 +1,242 @@
|
||||
// BillingTestModule.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "BillingTestModule.h"
|
||||
#include "BillingTestModuleDlg.h"
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define new DEBUG_NEW
|
||||
#endif
|
||||
|
||||
|
||||
#include <mmsystem.h>
|
||||
#include <algorithm>
|
||||
|
||||
// CBillingTestModuleApp
|
||||
|
||||
BEGIN_MESSAGE_MAP(CBillingTestModuleApp, CWinApp)
|
||||
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
|
||||
|
||||
CBillingTestModuleApp::Packet::Packet(CBillingAsyncSocket& billingAsyncSocket,
|
||||
const HanUnitedBilling::GLTransStruct glTransStruct,
|
||||
unsigned long dwDelayMSec)
|
||||
: m_billingAsyncSocket(billingAsyncSocket),
|
||||
m_glTransStruct(glTransStruct),
|
||||
m_dwPendingTime(timeGetTime()),
|
||||
m_dwDelayMSec(dwDelayMSec)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// CBillingTestModuleApp <20><><EFBFBD><EFBFBD>
|
||||
|
||||
CBillingTestModuleApp::CBillingTestModuleApp()
|
||||
: m_lpBillingTestModule(0), m_lpListenAsyncSocket(0)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
|
||||
// InitInstance<63><65> <20><><EFBFBD><EFBFBD> <20>߿<EFBFBD><DFBF><EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20><>ġ<EFBFBD>մϴ<D5B4>.
|
||||
}
|
||||
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CBillingTestModuleApp <20><>ü<EFBFBD>Դϴ<D4B4>.
|
||||
|
||||
CBillingTestModuleApp theApp;
|
||||
|
||||
|
||||
// CBillingTestModuleApp <20>ʱ<EFBFBD>ȭ
|
||||
|
||||
BOOL CBillingTestModuleApp::InitInstance()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20>Ŵ<EFBFBD><C5B4>佺Ʈ<E4BDBA><C6AE> ComCtl32.dll <20><><EFBFBD><EFBFBD> 6 <20>̻<EFBFBD><CCBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD>־<EFBFBD> <20><>Ÿ<EFBFBD><C5B8><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>, Windows XP <20><EFBFBD> <20>ݵ<EFBFBD><DDB5><EFBFBD> InitCommonControls()<29><> <20>ʿ<EFBFBD><CABF>մϴ<D5B4>.
|
||||
// InitCommonControls()<29><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
InitCommonControls();
|
||||
|
||||
CWinApp::InitInstance();
|
||||
|
||||
if(!AfxSocketInit())
|
||||
{
|
||||
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ <20><><EFBFBD><EFBFBD>!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
m_lpListenAsyncSocket = CBillingAsyncSocket::CreateBillingSocket(SOCK_STREAM, LISTEN_PORT);
|
||||
|
||||
if(0 == m_lpListenAsyncSocket
|
||||
|| !m_lpListenAsyncSocket->Listen())
|
||||
{
|
||||
AfxMessageBox("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
AfxEnableControlContainer();
|
||||
|
||||
// ǥ<><C7A5> <20>ʱ<EFBFBD>ȭ
|
||||
// <20>̵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<>⸦ <20><><EFBFBD>̷<EFBFBD><CCB7><EFBFBD>
|
||||
// <20>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD> <20>ʿ<EFBFBD> <20><><EFBFBD><EFBFBD> Ư<><C6AF> <20>ʱ<EFBFBD>ȭ <20><>ƾ<EFBFBD><C6BE> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
|
||||
// <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʈ<EFBFBD><C6AE> Ű<><C5B0> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻʽÿ<CABD>.
|
||||
// TODO: <20><> <20><><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD> ȸ<><C8B8> <20>Ǵ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD> <20>մϴ<D5B4>.
|
||||
SetRegistryKey(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD>翡<EFBFBD><E7BFA1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1>"));
|
||||
|
||||
CBillingTestModuleDlg dlg;
|
||||
m_pMainWnd = &dlg;
|
||||
INT_PTR nResponse = dlg.DoModal();
|
||||
if (nResponse == IDOK)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> Ȯ<><C8AE><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
|
||||
// <20>ڵ带 <20><>ġ<EFBFBD>մϴ<D5B4>.
|
||||
}
|
||||
else if (nResponse == IDCANCEL)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD>Ҹ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
|
||||
// <20>ڵ带 <20><>ġ<EFBFBD>մϴ<D5B4>.
|
||||
}
|
||||
|
||||
m_lpListenAsyncSocket->Close();
|
||||
m_lpListenAsyncSocket->Release();
|
||||
m_lpListenAsyncSocket = 0;
|
||||
|
||||
// <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><EFBFBD><DEBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>ֵ<EFBFBD><D6B5><EFBFBD> FALSE<53><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
void CBillingTestModuleApp::ProcessPacket()
|
||||
{
|
||||
const int MAX_PROCESS_COUNT = 100;
|
||||
int nProcessCount = 0;
|
||||
|
||||
CBillingTestModuleDlg* lpDlg = GetMainDlg();
|
||||
|
||||
if(0 != lpDlg)
|
||||
{
|
||||
unsigned long dwCurrentTime = timeGetTime();
|
||||
|
||||
while(!m_RecvPacketList.empty() && nProcessCount < MAX_PROCESS_COUNT)
|
||||
{
|
||||
Packet& packet = m_RecvPacketList.front();
|
||||
|
||||
// <20>ð<EFBFBD><C3B0><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><>Ŷ<EFBFBD><C5B6> ó<><C3B3>.
|
||||
if(0 < static_cast<long>((packet.m_dwDelayMSec + packet.m_dwPendingTime) - dwCurrentTime))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20>α<EFBFBD><CEB1><EFBFBD>, <20>αƿ<D7BE><C6BF><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
packet.m_glTransStruct.HeaderMsg = ntohs(packet.m_glTransStruct.HeaderMsg);
|
||||
packet.m_glTransStruct.DataSize = ntohs(packet.m_glTransStruct.DataSize);
|
||||
packet.m_glTransStruct.SeqID = ntohl(packet.m_glTransStruct.SeqID);
|
||||
|
||||
const char* szIP = packet.m_glTransStruct.Data;
|
||||
const char* szID = packet.m_glTransStruct.Data + HanUnitedBilling::MAX_IP_LEN;
|
||||
|
||||
switch(packet.m_glTransStruct.HeaderMsg)
|
||||
{
|
||||
case HanUnitedBilling::AUTH:
|
||||
lpDlg->Login(packet.m_billingAsyncSocket, packet.m_glTransStruct.SeqID, szID, szIP);
|
||||
break;
|
||||
|
||||
case HanUnitedBilling::LOGOUT:
|
||||
lpDlg->Logout(packet.m_billingAsyncSocket, packet.m_glTransStruct.SeqID, szID, szIP);
|
||||
break;
|
||||
|
||||
case HanUnitedBilling::BILL_AUTH:
|
||||
lpDlg->BillAuth(packet.m_billingAsyncSocket, packet.m_glTransStruct.SeqID, szID, szIP);
|
||||
break;
|
||||
}
|
||||
|
||||
packet.m_billingAsyncSocket.Release();
|
||||
m_RecvPacketList.pop_front();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CBillingTestModuleApp::AddRecvPacket(CBillingAsyncSocket& billingAsyncSocket,
|
||||
const char* szBuffer, unsigned short usDataLen)
|
||||
{
|
||||
CBillingTestModuleDlg* lpDlg = GetMainDlg();
|
||||
|
||||
HanUnitedBilling::GLTransStruct glTransStruct;
|
||||
memset(&glTransStruct, 0, sizeof(HanUnitedBilling::GLTransStruct));
|
||||
memcpy(&glTransStruct, szBuffer, min(usDataLen, sizeof(HanUnitedBilling::GLTransStruct)));
|
||||
|
||||
if(0 != lpDlg)
|
||||
{
|
||||
unsigned long dwDelayMSec = 0;
|
||||
CBillingTestModuleDlg::Behavior behavior = CBillingTestModuleDlg::NORMAL_PROCESS;
|
||||
|
||||
switch(ntohs(glTransStruct.HeaderMsg))
|
||||
{
|
||||
case HanUnitedBilling::AUTH:
|
||||
{
|
||||
behavior = lpDlg->GetLoginAckType();
|
||||
if(CBillingTestModuleDlg::DELAY_ALL_PROCESS == behavior)
|
||||
{
|
||||
dwDelayMSec = lpDlg->GetLoginAckDelay();
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case HanUnitedBilling::BILL_AUTH:
|
||||
{
|
||||
behavior = lpDlg->GetBillAuthAckType();
|
||||
if(CBillingTestModuleDlg::DELAY_ALL_PROCESS == behavior)
|
||||
{
|
||||
dwDelayMSec = lpDlg->GetBillAuthAckDelay();
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if(CBillingTestModuleDlg::DROP_ALL_PROCESS != behavior)
|
||||
{
|
||||
billingAsyncSocket.AddRef();
|
||||
|
||||
m_RecvPacketList.push_back(Packet(
|
||||
billingAsyncSocket, glTransStruct, dwDelayMSec));
|
||||
}
|
||||
else
|
||||
{
|
||||
lpDlg->AddLog(NORMAL_LOG, "SS:0x%p/UID_IP:%s/Cmd:%d/SeqID:%d/<2F><>Ŷ<EFBFBD><C5B6> Drop<6F>մϴ<D5B4>.",
|
||||
&billingAsyncSocket, billingAsyncSocket.GetPeerAddrString(),
|
||||
ntohs(glTransStruct.HeaderMsg), ntohl(glTransStruct.SeqID));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CBillingTestModuleApp::RegisterSocket(CBillingAsyncSocket& billingAsyncSocket)
|
||||
{
|
||||
if(m_SocketList.end() == std::find(m_SocketList.begin(), m_SocketList.end(), &billingAsyncSocket))
|
||||
{
|
||||
m_SocketList.push_back(&billingAsyncSocket);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CBillingTestModuleApp::RemoveSocket(CBillingAsyncSocket& billingAsyncSocket)
|
||||
{
|
||||
SocketList::iterator pos = std::find(m_SocketList.begin(), m_SocketList.end(), &billingAsyncSocket);
|
||||
|
||||
if(pos != m_SocketList.end())
|
||||
{
|
||||
m_SocketList.erase(pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CBillingTestModuleApp::SendPendingAll(const HanUnitedBilling::GLTransStruct& glTransStruct)
|
||||
{
|
||||
SocketList::iterator pos = m_SocketList.begin();
|
||||
SocketList::iterator end = m_SocketList.end();
|
||||
|
||||
for(; pos != end; ++pos)
|
||||
{
|
||||
(*pos)->SendPending(glTransStruct);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user