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:
492
Server/NFAuthTool/NFAuthClient/NaveNet/NFNetClientS.cpp
Normal file
492
Server/NFAuthTool/NFAuthClient/NaveNet/NFNetClientS.cpp
Normal file
@@ -0,0 +1,492 @@
|
||||
#include "NFNet.h"
|
||||
#include "NFNetClientS.h"
|
||||
|
||||
namespace NaveNet {
|
||||
|
||||
NFNetClientS::NFNetClientS() : m_hSocket(NULL), m_nPort(0),
|
||||
m_hEventThread(NULL), m_hEvent(NULL), m_bConnect(FALSE), m_bClose(FALSE)
|
||||
{
|
||||
m_SendQueue.Create(64);
|
||||
m_RecvQueue.Create(256);
|
||||
m_RecvIO.NewIOBuf(0); // 0<><30><EFBFBD><EFBFBD> <20>ϸ<EFBFBD> <20>⺻<EFBFBD><E2BABB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> DefaultPacketSize * 1024
|
||||
|
||||
ZeroMemory(m_strIPAddr, sizeof(m_strIPAddr)); // Server IP<49><50><EFBFBD><EFBFBD>
|
||||
|
||||
WinSockInit();
|
||||
}
|
||||
|
||||
NFNetClientS::~NFNetClientS()
|
||||
{
|
||||
// <20>ٽ<EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// m_bConnect = TRUE; // Connect <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
// CloseAll();
|
||||
OnClose();
|
||||
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
|
||||
|
||||
|
||||
// <20><><EFBFBD>ۻ<EFBFBD><DBBB><EFBFBD>
|
||||
m_SendQueue.Release();
|
||||
m_RecvQueue.Release();
|
||||
m_RecvIO.DeleteIOBuf();
|
||||
|
||||
WSACleanup();
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::WinSockInit()
|
||||
{
|
||||
WORD wVersionRequested;
|
||||
WSADATA wsaData;
|
||||
int err;
|
||||
|
||||
wVersionRequested = MAKEWORD( 2, 2 );
|
||||
|
||||
err = WSAStartup( wVersionRequested, &wsaData );
|
||||
if ( err != 0 ) {
|
||||
WSACleanup();
|
||||
// Tell the user that we could not find a usable
|
||||
// WinSock DLL.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( LOBYTE( wsaData.wVersion ) != 2 ||
|
||||
HIBYTE( wsaData.wVersion ) != 2 ) {
|
||||
// Tell the user that we could not find a usable //
|
||||
// WinSock DLL. //
|
||||
WSACleanup( );
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::Init( LPCSTR szIP, int nPort )
|
||||
{
|
||||
m_nPort = nPort; // <20><>Ʈ <20><>ȣ
|
||||
unsigned long dwThreadId = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// ip <20><><EFBFBD>巹<EFBFBD><E5B7B9>
|
||||
IN_ADDR LoginAddress;
|
||||
if (GetHostIPByDomain(LoginAddress, szIP))
|
||||
strncpy(m_strIPAddr, inet_ntoa(LoginAddress), 32);
|
||||
else
|
||||
strncpy(m_strIPAddr, szIP, 32);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Ų<EFBFBD><C5B2>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ῡ <20><><EFBFBD><EFBFBD><EFBFBD>Ѵٸ<D1B4>
|
||||
// Netword Event <20><><EFBFBD><EFBFBD> FW_CLOSE<53><45> <20><EFBFBD><DFBB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Close<73>ȴ<EFBFBD>.
|
||||
if(!Connect())
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
|
||||
Sleep(100); // Sleep...
|
||||
OnClose();
|
||||
|
||||
//LOG_ERROR((L"ClientCtrl Init Faild."));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
m_bClose = FALSE;
|
||||
|
||||
m_hEventThread =
|
||||
(HANDLE)CreateThread(NULL, // Security
|
||||
0, // Stack size - use default
|
||||
EventThreadProc, // Thread fn entry point
|
||||
(void*) this,
|
||||
0, // Init flag
|
||||
&dwThreadId); // Thread address
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void NFNetClientS::Disconnect()
|
||||
{
|
||||
// <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Close<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CloseAll() ȣ<><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʰ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
OnClose();
|
||||
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
|
||||
}
|
||||
|
||||
void NFNetClientS::Stop()
|
||||
{
|
||||
if (m_hSocket)
|
||||
{
|
||||
struct linger li = {0, 0}; // Default: SO_DONTLINGER
|
||||
|
||||
li.l_onoff = 1; // SO_LINGER, timeout = 0
|
||||
shutdown(m_hSocket, SD_BOTH ); // <20><><EFBFBD><EFBFBD>? <20>̰<EFBFBD> <20><><EFBFBD><EFBFBD>? ^^;; <20>㿡 ã<>ƺ<EFBFBD><C6BA><EFBFBD>
|
||||
// 2001<30><31> 9<><39> 6<><36>
|
||||
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ť<><C5A5> <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> <20>ɼ<EFBFBD>
|
||||
setsockopt(m_hSocket, SOL_SOCKET, SO_LINGER, (CHAR *)&li, sizeof(li));
|
||||
closesocket(m_hSocket); // <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD>
|
||||
m_hSocket = NULL;
|
||||
}
|
||||
|
||||
if(m_hEventThread) CloseHandle(m_hEventThread);
|
||||
m_hEventThread = NULL;
|
||||
|
||||
if(m_hEvent) WSACloseEvent(m_hEvent);
|
||||
m_hEvent = NULL;
|
||||
}
|
||||
|
||||
void NFNetClientS::CloseAll()
|
||||
{
|
||||
if(m_bConnect)
|
||||
{
|
||||
OnClose();
|
||||
Stop(); // <20><><EFBFBD><EFBFBD> <20>Լ<EFBFBD> ȣ<><C8A3>
|
||||
}
|
||||
}
|
||||
|
||||
void NFNetClientS::UpdateQue()
|
||||
{
|
||||
while(GetQueCnt() != 0)
|
||||
{
|
||||
// <20><>Ŷ<EFBFBD><C5B6> <20><><EFBFBD>ƴ<DEB5><C6B4><EFBFBD> <20>˻<EFBFBD>.
|
||||
NFPacket* pPacket = NULL;
|
||||
int Cnt = GetPacket(&pPacket);
|
||||
/*
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD> <20>۰ų<DBB0> Packet <20><> NULL<4C≯<EFBFBD>.
|
||||
if(Cnt <= 0 || pPacket == NULL)
|
||||
{
|
||||
//LOG_ERROR((L"NFNetClientS::UpdateQue() Packet Error"));
|
||||
//assert( "NFNetClientS::UpdateQue() Packet Error.");
|
||||
}
|
||||
*/
|
||||
// <20>Լ<EFBFBD> ȣ<><C8A3>
|
||||
ProcessPacket(pPacket, Cnt);
|
||||
|
||||
// <20><>Ŷ <20><><EFBFBD><EFBFBD>
|
||||
PopPacket();
|
||||
}
|
||||
}
|
||||
|
||||
void NFNetClientS::Update()
|
||||
{
|
||||
if(!m_bConnect) return;
|
||||
|
||||
UpdateQue();
|
||||
|
||||
OnSendPacketData();
|
||||
OnReadPacketData();
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::OnClose()
|
||||
{
|
||||
m_bClose = TRUE;
|
||||
m_bConnect = FALSE; // Connect <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
OnSocketEvent(WM_SOCK_CLOSE, 0);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::Connect()
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶<EFBFBD><CCB6><EFBFBD>
|
||||
if(m_bConnect) return TRUE;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>ִٸ<D6B4>
|
||||
Stop();
|
||||
|
||||
m_RecvQueue.Reset();
|
||||
m_SendQueue.Reset();
|
||||
m_RecvIO.InitIOBuf();
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_hSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if (m_hSocket == INVALID_SOCKET)
|
||||
{
|
||||
OnSocketEvent(WM_CONNECT, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20>ڵ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
m_hEvent = WSACreateEvent();
|
||||
if (m_hEvent == WSA_INVALID_EVENT)
|
||||
{
|
||||
Stop();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Request async notification
|
||||
int nRet = WSAEventSelect(m_hSocket,
|
||||
m_hEvent,
|
||||
FD_CLOSE | FD_CONNECT); // <20><>ȣ<EFBFBD><C8A3> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> <20>ް<EFBFBD> <20>Ѵ<EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (nRet == SOCKET_ERROR)
|
||||
{
|
||||
Stop();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// <20><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
unsigned long ul = 1;
|
||||
nRet = ioctlsocket(m_hSocket, FIONBIO, (unsigned long*)&ul);
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>˻<EFBFBD>
|
||||
if (m_hSocket == SOCKET_ERROR)
|
||||
{
|
||||
OnSocketEvent(WM_CONNECT, FALSE);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
int zero = 0;
|
||||
int err = 0;
|
||||
|
||||
// Send Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if( (err = setsockopt( m_hSocket, SOL_SOCKET, SO_SNDBUF, (const char*)&zero, sizeof(zero))) == SOCKET_ERROR)
|
||||
{
|
||||
closesocket(m_hSocket);
|
||||
m_hSocket = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Receive Buffer<65><72> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
if((err = setsockopt( m_hSocket, SOL_SOCKET, SO_RCVBUF, (const char*)&zero, sizeof(zero) )) == SOCKET_ERROR)
|
||||
{
|
||||
closesocket(m_hSocket);
|
||||
m_hSocket = NULL;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
SOCKADDR_IN saServer;
|
||||
|
||||
memset(&saServer,0,sizeof(saServer));
|
||||
|
||||
saServer.sin_family = AF_INET;
|
||||
saServer.sin_addr.s_addr = inet_addr(m_strIPAddr);
|
||||
saServer.sin_port = htons(m_nPort);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Connect
|
||||
nRet = connect(m_hSocket,(sockaddr*)&saServer, sizeof(saServer));
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̰ų<CCB0> <20><><EFBFBD><EFBFBD>ŷ<EFBFBD><C5B7> <20>Ǿ<EFBFBD><C7BE>ٸ<EFBFBD>
|
||||
if (nRet == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK)
|
||||
{
|
||||
Stop();
|
||||
return FALSE;
|
||||
}
|
||||
/*
|
||||
<09>̷<EFBFBD><CCB7><EFBFBD> Connect<63><74> <20>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AccetpEx<45><78> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD> ClientSceesion<6F><6E>
|
||||
Recv<63><76><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD> <20><><EFBFBD><EFBFBD><EEB0A3>.
|
||||
<09><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> Connect<63><74> <20><><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD> FD_CONNECT<43><54> <20><EFBFBD><DFBB><EFBFBD>Ų<EFBFBD><C5B2>.
|
||||
*/
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
DWORD WINAPI NFNetClientS::EventThreadProc(LPVOID lParam)
|
||||
{
|
||||
// Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
NFNetClientS* pThis = reinterpret_cast<NFNetClientS*>(lParam);
|
||||
|
||||
WSANETWORKEVENTS events; // <20><>Ʈ<EFBFBD><C6AE>ũ <20>̺<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>
|
||||
BOOL bThreadRun = TRUE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
while(bThreadRun)
|
||||
{
|
||||
if(pThis->m_bClose)
|
||||
{
|
||||
bThreadRun = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
DWORD dwRet;
|
||||
dwRet = WSAWaitForMultipleEvents(1,
|
||||
&pThis->m_hEvent,
|
||||
FALSE,
|
||||
INFINITE,
|
||||
FALSE);
|
||||
|
||||
if(!pThis->m_hSocket)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>
|
||||
bThreadRun = FALSE;
|
||||
break;
|
||||
}
|
||||
// Figure out what happened
|
||||
int nRet = WSAEnumNetworkEvents(pThis->m_hSocket,
|
||||
pThis->m_hEvent,
|
||||
&events);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
if (nRet == SOCKET_ERROR)
|
||||
{
|
||||
//LOG_ERROR((L"EventThread : SOCKET_ERROR, %d", WSAGetLastError()) );
|
||||
bThreadRun = FALSE;
|
||||
break;
|
||||
}
|
||||
|
||||
///////////////////
|
||||
// Handle events //
|
||||
bThreadRun = pThis->NetworkEventHanlder(events.lNetworkEvents);
|
||||
}
|
||||
// <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>尡 <20><><EFBFBD><EFBFBD> <20>Ǹ<EFBFBD> Server<65><72> <20><><EFBFBD><EFBFBD> Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><><EFBFBD><EFBFBD>!!! <<3C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>>
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʱ<EFBFBD>ȭ<EFBFBD><C8AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ֱ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ʴ´<CAB4>.
|
||||
// pThis->CloseAll();
|
||||
return 0;
|
||||
}
|
||||
|
||||
VOID NFNetClientS::OnSendPacketData()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Send
|
||||
int rc = 0;
|
||||
int idx = 0,size = 0;
|
||||
CHAR* send_temp=NULL;
|
||||
NFPacket Packet;
|
||||
|
||||
if((size = m_SendQueue.Get(Packet)) != -1)
|
||||
{
|
||||
// <20><><EFBFBD>⼭ <20><>ȣȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ??
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> üũ<C3BC><C5A9><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
size = Packet.EncryptPacket();
|
||||
|
||||
send_temp = (CHAR*)&Packet;
|
||||
while(size > 0)
|
||||
{
|
||||
// 10004 : WSACancelBlockingCall<6C><6C> ȣ<><C8A3><EFBFBD>Ͽ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ߴܵǾ<DCB5><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
// 10058 : <20>ش<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>Ƿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
|
||||
// 10038 : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD> <20>Ҷ<EFBFBD> <20><><EFBFBD><EFBFBD>.
|
||||
if((rc = send(m_hSocket, &send_temp[idx], size, 0)) == SOCKET_ERROR)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (GetLastError() != WSAEWOULDBLOCK) // <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>
|
||||
{
|
||||
//LOG_ERROR((L"SendThread : SOCKET_ERROR, %d", WSAGetLastError()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ٸ<EFBFBD>
|
||||
size -= rc;
|
||||
idx += rc;
|
||||
}
|
||||
}
|
||||
idx = 0;
|
||||
size = 0;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
VOID NFNetClientS::OnReadPacketData()
|
||||
{
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Recv
|
||||
int Ret = recv(m_hSocket, m_RecvBuffer, DEF_MAXPACKETSIZE, 0); // <20><><EFBFBD><EFBFBD>Ÿ Receive
|
||||
if(Ret == 0) // Graceful close
|
||||
{
|
||||
CloseAll();
|
||||
return;
|
||||
}
|
||||
else if (Ret == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK ) // <20><><EFBFBD><EFBFBD>ŷ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ϶<C6B4><CFB6><EFBFBD>
|
||||
{
|
||||
//LOG_ERROR((L"[Recv] Packet Size Error : SOCKET_ERROR, %d", WSAGetLastError()));
|
||||
CloseAll();
|
||||
return;
|
||||
}
|
||||
|
||||
if(m_RecvIO.Append(m_RecvBuffer, Ret) == -1)
|
||||
{
|
||||
//LOG_ERROR((L"m_RecvIO.Append : Buffer Overflow..") );
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD> <20><>Ŷ<EFBFBD><C5B6> IOBuffer<65><72> <20>־<EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
|
||||
if(m_RecvIO.GetPacket(&m_RecvPacket) == 1)
|
||||
{
|
||||
m_RecvPacket.DecryptPacket();
|
||||
|
||||
if(m_RecvPacket.IsAliveChecksum())
|
||||
{
|
||||
// <20><><EFBFBD>⼭ <20><><EFBFBD><EFBFBD>Ŷ ó<><C3B3> <20><>ƾ ȣ<><C8A3>
|
||||
m_RecvQueue.Add(m_RecvPacket);
|
||||
|
||||
// Message Type <20>϶<EFBFBD> <20>̰ɷ<CCB0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
// <20><><EFBFBD><EFBFBD> Update <20>̺<EFBFBD>Ʈ ȣ<><C8A3><EFBFBD≯<EFBFBD> <20><> <20><>ƾ<EFBFBD><C6BE> <20>ּ<EFBFBD>ó<EFBFBD><C3B3> <20><><EFBFBD>ش<EFBFBD>.
|
||||
OnSocketEvent(WM_RECV_MSG, m_RecvPacket.m_Header.Size);
|
||||
}
|
||||
|
||||
m_RecvPacket.Init();
|
||||
}
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::NetworkEventHanlder(LONG lEvent)
|
||||
{
|
||||
BOOL bFlag = TRUE;
|
||||
|
||||
// if(lEvent & FD_READ)
|
||||
// {
|
||||
// bFlag = OnReadPacketData();
|
||||
// }
|
||||
if(lEvent & FD_CLOSE)
|
||||
{
|
||||
bFlag = FALSE;
|
||||
}
|
||||
if(lEvent & FD_CONNECT)
|
||||
{
|
||||
bFlag = OnConnect();
|
||||
}
|
||||
|
||||
return bFlag;
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::OnConnect()
|
||||
{
|
||||
//////////////////////////////////////////////////////////
|
||||
// IOCP Ȱ<><C8B0>
|
||||
//////////////////////////////////////////////////////////
|
||||
int ErrorCode = send(m_hSocket, (const char*)CONNECT_CHECK_DATA,CONNECT_CHECK_SIZE,0);
|
||||
if(ErrorCode == SOCKET_ERROR)
|
||||
{
|
||||
m_bConnect = FALSE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> OFF
|
||||
}
|
||||
else
|
||||
{
|
||||
m_bConnect = TRUE; // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ON
|
||||
}
|
||||
OnSocketEvent(WM_CONNECT, m_bConnect);
|
||||
|
||||
return m_bConnect;
|
||||
}
|
||||
|
||||
int NFNetClientS::GetQueCnt()
|
||||
{
|
||||
return m_RecvQueue.GetQueCnt();
|
||||
}
|
||||
|
||||
int NFNetClientS::GetPacket(NFPacket** Packet)
|
||||
{
|
||||
return m_RecvQueue.GetPnt(Packet);
|
||||
}
|
||||
|
||||
void NFNetClientS::PopPacket()
|
||||
{
|
||||
m_RecvQueue.Del();
|
||||
}
|
||||
|
||||
BOOL NFNetClientS::SendPost(NFPacket& Packet)
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Send <20>ϱ<EFBFBD>..
|
||||
return m_SendQueue.Add(Packet);
|
||||
}
|
||||
|
||||
void NFNetClientS::GetLocalIP(CHAR* LocalIP)
|
||||
{
|
||||
CHAR name[256];
|
||||
CHAR* TempIp;
|
||||
PHOSTENT hostinfo;
|
||||
|
||||
WinSockInit();
|
||||
|
||||
if( gethostname ( name, sizeof(name)) == 0)
|
||||
{
|
||||
if((hostinfo = gethostbyname(name)) != NULL)
|
||||
{
|
||||
TempIp = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
|
||||
strcpy(LocalIP, TempIp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user