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:
240
Server/Billing/한게임 통합빌링 테스트모듈/BillingAsyncSocket.cpp
Normal file
240
Server/Billing/한게임 통합빌링 테스트모듈/BillingAsyncSocket.cpp
Normal file
@@ -0,0 +1,240 @@
|
||||
// BillingAsyncSocket.cpp : <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
|
||||
//
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "BillingTestModule.h"
|
||||
#include "BillingAsyncSocket.h"
|
||||
#include ".\billingasyncsocket.h"
|
||||
|
||||
|
||||
// CBillingAsyncSocket
|
||||
|
||||
CBillingAsyncSocket::CBillingAsyncSocket()
|
||||
: m_eConnectionMode(ACTIVE_CONNECTION),
|
||||
m_nAddressLen(0),
|
||||
m_nRefCount(1),
|
||||
m_nSendBytesFirstPacket(0),
|
||||
m_nBufferUsed(0)
|
||||
{
|
||||
memset(&m_PeerAddress, 0, sizeof(SOCKADDR));
|
||||
}
|
||||
|
||||
CBillingAsyncSocket::~CBillingAsyncSocket()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// CBillingAsyncSocket <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD><D4BC>Դϴ<D4B4>.
|
||||
|
||||
CBillingAsyncSocket* CBillingAsyncSocket::CreateBillingSocket(int nSocketType, UINT nSocketPort)
|
||||
{
|
||||
CBillingAsyncSocket* lpSocket = new CBillingAsyncSocket;
|
||||
if(0 != lpSocket)
|
||||
{
|
||||
if(!lpSocket->Create(nSocketPort, nSocketType))
|
||||
{
|
||||
delete lpSocket;
|
||||
lpSocket = 0;
|
||||
}
|
||||
}
|
||||
return lpSocket;
|
||||
}
|
||||
|
||||
void CBillingAsyncSocket::OnAccept(int nErrorCode)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
if(0 == nErrorCode)
|
||||
{
|
||||
CBillingAsyncSocket* lpSocket = new CBillingAsyncSocket;
|
||||
|
||||
if(0 != lpSocket)
|
||||
{
|
||||
lpSocket->m_nAddressLen = sizeof(SOCKADDR_IN);
|
||||
|
||||
if(Accept(*lpSocket, &lpSocket->m_PeerAddress, &lpSocket->m_nAddressLen))
|
||||
{
|
||||
lpSocket->m_eConnectionMode = PASSIVE_CONNECTION;
|
||||
theApp.RegisterSocket(*lpSocket);
|
||||
|
||||
lpSocket->OnReceive(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
lpSocket->Release();
|
||||
lpSocket = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO : Make log here
|
||||
Close();
|
||||
}
|
||||
|
||||
CAsyncSocket::OnAccept(nErrorCode);
|
||||
}
|
||||
|
||||
|
||||
void CBillingAsyncSocket::OnReceive(int nErrorCode)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
if(0 == nErrorCode)
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
int nReceived = Receive(m_szRecvBuffer + m_nBufferUsed,
|
||||
MAX_RECV_BUFFER - m_nBufferUsed);
|
||||
|
||||
if(SOCKET_ERROR != nReceived)
|
||||
{
|
||||
m_nBufferUsed += nReceived;
|
||||
|
||||
size_t nBufferPos = 0;
|
||||
while(sizeof(unsigned short) + nBufferPos <= m_nBufferUsed)
|
||||
{
|
||||
unsigned short usPacketSize = ntohs(*reinterpret_cast<unsigned short*>(m_szRecvBuffer + nBufferPos))
|
||||
+ sizeof(unsigned short) + sizeof(unsigned short) + sizeof(unsigned long);
|
||||
|
||||
if(m_nBufferUsed < usPacketSize + nBufferPos)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
theApp.AddRecvPacket(*this, m_szRecvBuffer, usPacketSize);
|
||||
nBufferPos += usPacketSize;
|
||||
}
|
||||
|
||||
if(0 != nBufferPos)
|
||||
{
|
||||
memmove(m_szRecvBuffer, m_szRecvBuffer + nBufferPos,
|
||||
m_nBufferUsed - nBufferPos);
|
||||
|
||||
m_nBufferUsed -= nBufferPos;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(GetLastError() != WSAEWOULDBLOCK)
|
||||
{
|
||||
// TODO : Make Log here
|
||||
Close();
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO : Make Log here
|
||||
Close();
|
||||
}
|
||||
|
||||
CAsyncSocket::OnReceive(nErrorCode);
|
||||
}
|
||||
|
||||
|
||||
void CBillingAsyncSocket::OnSend(int nErrorCode)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
if(0 == nErrorCode || WSAEWOULDBLOCK == nErrorCode)
|
||||
{
|
||||
SendPacket();
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO : Make Log here
|
||||
Close();
|
||||
}
|
||||
|
||||
CAsyncSocket::OnSend(nErrorCode);
|
||||
}
|
||||
|
||||
|
||||
void CBillingAsyncSocket::OnClose(int nErrorCode)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
theApp.RemoveSocket(*this);
|
||||
|
||||
CAsyncSocket::OnClose(nErrorCode);
|
||||
|
||||
if(m_eConnectionMode == PASSIVE_CONNECTION)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
Release();
|
||||
}
|
||||
}
|
||||
|
||||
void CBillingAsyncSocket::OnConnect(int nErrorCode)
|
||||
{
|
||||
// TODO: <20><><EFBFBD> Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
|
||||
|
||||
m_eConnectionMode = ACTIVE_CONNECTION;
|
||||
CAsyncSocket::OnConnect(nErrorCode);
|
||||
}
|
||||
|
||||
LONG CBillingAsyncSocket::AddRef()
|
||||
{
|
||||
return ++m_nRefCount;
|
||||
}
|
||||
|
||||
LONG CBillingAsyncSocket::Release()
|
||||
{
|
||||
LONG nRefCount = --m_nRefCount;
|
||||
|
||||
if(0 == nRefCount)
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
return nRefCount;
|
||||
}
|
||||
|
||||
|
||||
void CBillingAsyncSocket::SendPending(const HanUnitedBilling::GLTransStruct& glTransStruct)
|
||||
{
|
||||
m_SendPacketList.push_back(glTransStruct);
|
||||
SendPacket();
|
||||
}
|
||||
|
||||
void CBillingAsyncSocket::SendPacket()
|
||||
{
|
||||
while(!m_SendPacketList.empty())
|
||||
{
|
||||
HanUnitedBilling::GLTransStruct& sendTransStruct = m_SendPacketList.front();
|
||||
|
||||
int nTotalBytes = ntohs(sendTransStruct.DataSize) + sizeof(sendTransStruct.DataSize)
|
||||
+ sizeof(sendTransStruct.HeaderMsg) + sizeof(sendTransStruct.SeqID);
|
||||
|
||||
int nSendLen = Send(
|
||||
reinterpret_cast<char*>(&sendTransStruct) + m_nSendBytesFirstPacket,
|
||||
nTotalBytes - m_nSendBytesFirstPacket);
|
||||
|
||||
if(SOCKET_ERROR != nSendLen)
|
||||
{
|
||||
m_nSendBytesFirstPacket += nSendLen;
|
||||
|
||||
if(m_nSendBytesFirstPacket == nTotalBytes)
|
||||
{
|
||||
m_SendPacketList.pop_front();
|
||||
m_nSendBytesFirstPacket = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(GetLastError() != WSAEWOULDBLOCK)
|
||||
{
|
||||
// TODO : Make Log here
|
||||
Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user