/////////////////////////////////////////////////////////////////////////////////////////////// // // ClientSocket Class // /////////////////////////////////////////////////////////////////////////////////////////////// #include "LoginSocket.h" #include #include #include #include #include LoginSocket::LoginSocket(HWND hWnd_In): m_hMainWnd(hWnd_In), m_ConnectServer(0) { m_RegAddress.S_un.S_addr = 0; } LoginSocket::~LoginSocket(void) { Disconnect(); } bool LoginSocket::ConnectToLoginServer(char* Address_In) { Disconnect(); if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_LOGIN_SOCKET)) return false; m_ConnectServer = CO_SRV::CO_LOGIN; return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(Address_In, DemonLoginTCPPort), &m_pRecvDataBuffer); } bool LoginSocket::ConnectToAuthServer(void) { Disconnect(); if(!Socket::CreateTCPSocket(&m_TCPSocket, m_hMainWnd, WM_LOGIN_SOCKET)) return false; m_ConnectServer = CO_SRV::CO_AUTH; return Socket::Connect(m_TCPSocket, Socket::MakeSockAddr(m_RegAddress, DemonAuthTCPPort), &m_pRecvDataBuffer); } bool LoginSocket::Disconnect(void) { if(m_TCPSocket) Socket::DeleteSocket(&m_TCPSocket, m_hMainWnd); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ÇÎ ÆÐŶ [ public ] // // Parameter : // // Return : // ÆÐŶ »ý¼º ÈÄ º¸³»±â ¼º°ø½Ã true, ½ÇÆÐ½Ã false // /////////////////////////////////////////////////////////////////////////////////////////////// bool LoginSocket::SendSysPing(void) { if(m_TCPSocket == NULL) return false; CPacket* lpBuffer = new CPacket(sizeof(PktSyP), CmdSysPing, 0); LPPktSyP lpSyPAckPt = reinterpret_cast(lpBuffer->GetBuf()); lpSyPAckPt->m_dwTickTime = GetTickCount(); lpBuffer->WrapPacket(true); if(!Send(m_TCPSocket, lpBuffer->GetWSABuf())) { lpBuffer->Release(); return false; } lpBuffer->Release(); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // GAS À¯Àú ÀÎÁõ [ public ] // - GAS ¼­¹ö·Î À¯Àú ÀÎÁõ. // // Parameter : // 1st : À¯Àú ¾ÆÀ̵𠹮ÀÚ¿­[In] ex) "Bono" // 2st : À¯Àú ÆÐ½º ¿öµå ¹®ÀÚ¿­[In] ex) "Bono" // 3st : Ŭ¶óÀÌ¾ðÆ® ¹öÁ¯[In] // // Return : // ÆÐŶ »ý¼º ÈÄ º¸³»±â ¼º°ø½Ã true, ½ÇÆÐ½Ã false // /////////////////////////////////////////////////////////////////////////////////////////////// bool LoginSocket::AuthAccount(char* UserID_In, char* UserPW_In, DWORD ClientVer_In, unsigned short CnFlag_In, unsigned short Flag_In) { if(m_TCPSocket == NULL || UserID_In == NULL || UserPW_In == NULL) return false; CPacket* lpBuffer = new CPacket(sizeof(PktAU), CmdAuthAccount, 0, CnFlag_In); LPPktAU lpAUPt = reinterpret_cast(lpBuffer->GetBuf()); strncpy(lpAUPt->m_UserAccount, UserID_In, 16); strncpy(lpAUPt->m_UserPassword, UserPW_In, 16); lpAUPt->m_dwSessionID = GetDiskSerial('C'); lpAUPt->m_ClientVerInfo = ClientVer_In; lpAUPt->m_cFlag = Flag_In; lpBuffer->WrapPacket(true); if(!Send(m_TCPSocket, lpBuffer->GetWSABuf())) { lpBuffer->Release(); return false; } lpBuffer->Release(); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ÆÐŶ ó¸® [ public ] // - AUAckPt ó¸® // // Parameter : // 1st : ÆÐŶ ¹öÆÛ[In] // 2st : À¯Àú °íÀ¯ ¾ÆÀ̵ð Æ÷ÀÎÅÍ[Out] // 3st : ·Î±×ÀΠij¸¯ÅÍ Á¤º¸ ±¸Á¶Ã¼[Out] // // Return : // ¿¡·¯ ÄÚµå // /////////////////////////////////////////////////////////////////////////////////////////////// DWORD LoginSocket::HandleAuthAccount(char *pBuffer_In, DWORD *SessionID_Out, DWORD *UserID_Out) { LPPktAUAck lpAUAckPt = (LPPktAUAck)pBuffer_In; if(lpAUAckPt == NULL || UserID_Out == NULL) return WrongParameter; *SessionID_Out = lpAUAckPt->m_dwSessionID; *UserID_Out = lpAUAckPt->m_dwUserID; if(lpAUAckPt->Error() != NoError) return lpAUAckPt->Error(); return NoError; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // GAS ¼­¹ö ¼±Åà [ public ] // - GAS ¼­¹ö ¼±ÅÃ. // // Parameter : // 1st : À¯Àú ¾ÆÀ̵ð[In] // 2st : ¼­¹ö ¾ÆÀ̵ð[In] // // Return : // ÆÐŶ »ý¼º ÈÄ º¸³»±â ¼º°ø½Ã true, ½ÇÆÐ½Ã false // /////////////////////////////////////////////////////////////////////////////////////////////// bool LoginSocket::ServerList(DWORD ClientVersion_In) { if(m_TCPSocket == NULL) return false; CPacket* lpBuffer = new CPacket(sizeof(PktSvL), CmdLoginServerList, 0, 0); LPPktSvL lpSvLPt = reinterpret_cast(lpBuffer->GetBuf()); lpSvLPt->m_ClientVerInfo = ClientVersion_In; lpBuffer->WrapPacket(true); if(!Send(m_TCPSocket, lpBuffer->GetWSABuf())) { lpBuffer->Release(); return false; } lpBuffer->Release(); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ÆÐŶ ó¸® [ public ] // - AUAckPt ó¸® // // Parameter : // 1st : ÆÐŶ ¹öÆÛ[In] // 2st : À¯Àú °íÀ¯ ¾ÆÀ̵ð Æ÷ÀÎÅÍ[Out] // 3st : ·Î±×ÀΠij¸¯ÅÍ Á¤º¸ ±¸Á¶Ã¼[Out] // // Return : // ¿¡·¯ ÄÚµå // /////////////////////////////////////////////////////////////////////////////////////////////// DWORD LoginSocket::HandleServerList(char *pBuffer_In, DWORD *dwUserID_Out, SERVER_LIST* lpServerList_Out) { LPPktSvLAck lpSvLAckPt = (LPPktSvLAck)pBuffer_In; if(lpSvLAckPt == NULL || dwUserID_Out == NULL) return WrongParameter; if(lpSvLAckPt->Error() != NoError) return lpSvLAckPt->Error(); *dwUserID_Out = lpSvLAckPt->m_dwUserID; CopyMemory(lpServerList_Out, &(lpSvLAckPt->m_ServerList), sizeof(SERVER_LIST)); return NoError; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // GAS ¼­¹ö ¼±Åà [ public ] // - GAS ¼­¹ö ¼±ÅÃ. // // Parameter : // 1st : À¯Àú ¾ÆÀ̵ð[In] // 2st : ¼­¹ö ¾ÆÀ̵ð[In] // // Return : // ÆÐŶ »ý¼º ÈÄ º¸³»±â ¼º°ø½Ã true, ½ÇÆÐ½Ã false // /////////////////////////////////////////////////////////////////////////////////////////////// bool LoginSocket::ServerGroup(unsigned char Group_In) { if(m_TCPSocket == NULL) return false; CPacket* lpBuffer = new CPacket(sizeof(PktSG), CmdServerGroup, 0, 0); LPPktSG lpSGPt = reinterpret_cast(lpBuffer->GetBuf()); lpSGPt->m_cGroup = Group_In; lpBuffer->WrapPacket(true); if(!Send(m_TCPSocket, lpBuffer->GetWSABuf())) { lpBuffer->Release(); return false; } lpBuffer->Release(); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ¼­¹ö ¼±Åà ÆÐŶ ó¸® [ public ] // - AUTSAck ó¸® // // Parameter : // 1st : ÆÐŶ ¹öÆÛ[In] // 2st : ¼­¹ö ¾ÆÀ̵ð Æ÷ÀÎÅÍ[Out] // // Return : // ¿¡·¯ ÄÚµå // /////////////////////////////////////////////////////////////////////////////////////////////// DWORD LoginSocket::HandleServerGroup(char *pBuffer_In, DWORD *dwServerID_Out) { LPPktSGAck lpSGAckPt = (LPPktSGAck)pBuffer_In; if(lpSGAckPt == NULL || dwServerID_Out == NULL) return WrongParameter; if(lpSGAckPt->Error() != NoError) return lpSGAckPt->Error(); *dwServerID_Out = lpSGAckPt->m_dwServerID; m_RegAddress = lpSGAckPt->m_AuthAddress; return NoError; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ÆÐÄ¡ ÁÖ¼Ò [ public ] // - ÆÐÄ¡ ÁÖ¼Ò ¾ò±â // // Parameter : // 1st : ¼­¹ö ¾ÆÀ̵ð[In] // // Return : // ÆÐŶ »ý¼º ÈÄ º¸³»±â ¼º°ø½Ã true, ½ÇÆÐ½Ã false // /////////////////////////////////////////////////////////////////////////////////////////////// bool LoginSocket::PatchAddress(DWORD ServerID_In) { if(m_TCPSocket == NULL) return false; CPacket* lpBuffer = new CPacket(sizeof(PktSPI), CmdSysPatchAddress, 0, 0); LPPktSPI lpSPIPt = reinterpret_cast(lpBuffer->GetBuf()); lpSPIPt->m_dwServerID = ServerID_In; lpBuffer->WrapPacket(true); if(!Send(m_TCPSocket, lpBuffer->GetWSABuf())) { lpBuffer->Release(); return false; } lpBuffer->Release(); return true; } //Interface///////////////////////////////////////////////////////////////////////////////////// // // ÆÐÄ¡ ÁÖ¼Ò [ public ] // - ÆÐÄ¡ ÁÖ¼Ò ¾ò±â // // Parameter : // 1st : ÆÐÄ¡ ÁÖ¼Ò[In] // // Return : // ¿¡·¯ ÄÚµå // /////////////////////////////////////////////////////////////////////////////////////////////// DWORD LoginSocket::HandlePatchAddress(char *pBuffer_In, DWORD *ClientVer_Out, char *PatchAddress_Out) { LPPktSPIAck lpSPIAckPt = (LPPktSPIAck)pBuffer_In; if(lpSPIAckPt == NULL) return WrongParameter; if(lpSPIAckPt->Error() != NoError) return lpSPIAckPt->Error(); *ClientVer_Out = lpSPIAckPt->m_dwClientVer; strncpy(PatchAddress_Out, lpSPIAckPt->m_PatchAddress, PktSPIAck::PATCH_ADDRESS_LENGTH); return NoError; }