#include "StdAfx.h" #include ".\tempserversession.h" #include "ServerSessionFactory.h" #include "ServerSessionManager.h" #include #include #ifdef _NA_006543_20130318_HEARTBEAT #include "AgentServerSession.h" #endif TempServerSession::TempServerSession(void) { } TempServerSession::~TempServerSession(void) { } VOID TempServerSession::OnRecv( BYTE * pMsg, WORD wSize ) { // Ç®·ÎºÎÅÍ NetworkObject¸¦ ¹Þ¾Æ ¿Â´Ù. // TempÀ϶§ 2°³°¡ ¿Ã¼ö ÀÖ´Ù.. // Agent ¼­¹ö´Â Auth¸¦ º¸³½´Ù. ServerSession* pNewSession = NULL; MSG_BASE* pBase = (MSG_BASE *)pMsg; eUPDATE_SERVER_TYPE ServerType; if( pBase->m_byCategory == SA_SERVER && pBase->m_byProtocol == SA_SERVER_TYPE_SYN ) { MSG_SERVER_TYPE * pRecvMsg = (MSG_SERVER_TYPE *)pMsg; if( pRecvMsg->m_byServerType == UPDATE_AGENT ) { pNewSession = ServerSessionFactory::Instance()->AllocServerSession( UPDATE_AGENT ); ServerType = UPDATE_AGENT; } else { MSGOUT( "[TempServerSession::OnRecv] Agent·Î ºÎÅÍ À߸øµÈ °ªÀÌ Àü´ÞµÇ¾ú½À´Ï´Ù.\n" ); Disconnect(); return; } } else if( pBase->m_byCategory == SA_CHECK && pBase->m_byProtocol == SA_CHECK_GAMEPROCESS_NTF ) { // ÀÌ ÆÐŶÀº Agent°¡ ½ÃÀ۵Ǵ ´ë·Î, º¸³»¹Ç·Î.. ¿©±â ¿Ã ¼ö ÀÖ´Ù. µû¶ó¼­ ÀÌ ÆÐŶÀÌ ¿Ã¶§´Â // ¹«½ÃÇÑ´Ù. return; } else if( pBase->m_byCategory == MO_OPERATION && pBase->m_byProtocol == MO_RTTG_CERTIFY_REQ ) { MSG_MO_RTTG_CERTIFY_REQ* pRecvMsg = (MSG_MO_RTTG_CERTIFY_REQ *)pMsg; if( pRecvMsg->dwType == SERVERTYPE_MASTER ) { pNewSession = ServerSessionFactory::Instance()->AllocServerSession( UPDATE_MASTER ); ServerType = UPDATE_MASTER; } else { MSGOUT( "[TempServerSession::OnRecv] ¸¶½ºÅÍ·Î ºÎÅÍ À߸øµÈ °ªÀÌ Àü´ÞµÇ¾ú½À´Ï´Ù." ); Disconnect(); return; } } else if( pBase->m_byCategory == MO_OPERATION && pBase->m_byProtocol == MO_RTTG_HEARTBEAT ) { //Heart Beat´Ù. ±×³É ¹«½ÃÇÏÀÚ. return; } else { // Master Server HeartBear Å×½ºÆ® ÄÚµå.. struct MSG_BASE_EX { DWORD m_dwKey; BYTE m_byCategory; // Ä«Å×°í¸® union { BYTE m_byProtocol; // Ä«Å×°í¸® ¾Æ·¡ÀÇ Å¸ÀÔ BYTE m_byEncryptedBuffer[1]; // ¾ÏȣȭµÈ ¹öÆÛ }; }; MSG_BASE_EX* pMsgBase = (MSG_BASE_EX*)pMsg; if( pMsgBase->m_byCategory == MO_OPERATION && pMsgBase->m_byProtocol == MO_RTTG_HEARTBEAT ) { //HeartBeat´Ù.. ±×³É ¸®ÅÏÇÏÀÚ. return; } MSGOUT( "[TempServerSession::OnRecv] ¿ÀÁö ¸»¾Æ¾ß ÇÒ ÆÐŶÀÌ ¿Ô½À´Ï´Ù.[C:%u, P:%u], IP = %s", pBase->m_byCategory, pBase->m_byProtocol, GetIP() ); Disconnect(); return; } if( NULL == pNewSession ) { MSGOUT( "[TempServerSession::OnRecv] À߸øµÈ ¼­¹ö°¡ Á¢¼Ó Çß½À´Ï´Ù." ); Disconnect(); return; } // »õ·Î¿î NetworkObjectÀ¸·Î ±³Ã¼ Redirect( pNewSession ); pNewSession->Clone( this ); MSGOUT( "[Redirect] ServerName = %s, ServerType = %d", GetUpdateServerType( ServerType ), ServerType ); //Temp »èÁ¦ ServerSessionManager::Instance()->DelSession( GetSessionIndex() ); ServerSessionFactory::Instance()->FreeServerSession( this ); //»õ·Î¿î ¼­¹ö¼¼¼Ç Ãß°¡. ServerSessionManager::Instance()->AddSession( pNewSession ); if( ServerType == UPDATE_AGENT ) { MSG_SA_SERVER_TYPE_ACK ack; pNewSession->SendPacket( (BYTE*)&ack, sizeof(ack)); #ifdef _NA_006543_20130318_HEARTBEAT static_cast(pNewSession)->SetServerStatus(SERVER_STATUS_ONLINE); #endif } }