#include "StdAfx.h" #include ".\handler_sma.h" #include #include #include "User.h" #include "UserManager.h" #include "UnitServer.h" #include "WorldManager.h" Handler_SMA::Handler_SMA(void) { } Handler_SMA::~Handler_SMA(void) { } VOID Handler_SMA::OnHandler_MO_RTTG_SERVERSHUTDOWN_ANS( ServerSession* pSession, MSG_BASE* pMsg, int nSize ) { MSG_MO_RTTG_SERVERSHUTDOWN_ANS *pRecvMsg = (MSG_MO_RTTG_SERVERSHUTDOWN_ANS*)pMsg; MSG_SM_SERVER_SHUTDOWN_ACK AckMsg; // ¼­¹öÁ¾·á ¼º°ø if( pRecvMsg->dwError == 0 ) { MSGOUT( "Server Shutdown Success! World[%u] Channel[%u] ServerType[%u] ServerIndex[%u] \n", pRecvMsg->m_ServerKey.GetWorldID(), pRecvMsg->m_ServerKey.GetChannelID(), pRecvMsg->m_ServerKey.GetServerType(), pRecvMsg->m_ServerKey.GetServerID() ); AckMsg.m_byResult = RC_SERVER_SHUTDOWN_SUCCESS; } // ¼­¹öÁ¾·á ½ÇÆÐ else { MSGOUT( "Server Shutdown Error! World[%u] Channel[%u] ServerType[%u] ServerIndex[%u] \n", pRecvMsg->m_ServerKey.GetWorldID(), pRecvMsg->m_ServerKey.GetChannelID(), pRecvMsg->m_ServerKey.GetServerType(), pRecvMsg->m_ServerKey.GetServerID() ); AckMsg.m_byResult = RC_SERVER_SHUTDOWN_FAIL; } // ÆÐÄ¡¸¦ ½ÇÇà½ÃŲ À¯Àú¸¦ ã´Â´Ù. User *pUser = (User*)UserManager::Instance()->GetUser( pRecvMsg->dwKey ); if( !pUser ) { MSGOUT( "[MO_RTTG_SERVERSHUTDOWN_ANS] Can't find ServerStart-User! \n" ); return; } // ¼­¹öÁ¾·á °á°ú¸¦ ¾Ë¸°´Ù. AckMsg.m_ServerInfo.m_byWorld = pRecvMsg->m_ServerKey.GetWorldID(); AckMsg.m_ServerInfo.m_byChannel = pRecvMsg->m_ServerKey.GetChannelID(); AckMsg.m_ServerInfo.m_byServerType = pRecvMsg->m_ServerKey.GetServerType(); AckMsg.m_ServerInfo.m_byServerNum = pRecvMsg->m_ServerKey.GetServerID(); pUser->SendPacket( &AckMsg, sizeof(AckMsg) ); } VOID Handler_SMA::OnHandler_MO_RTTG_ALL_SERVER_STATUS_NTF( ServerSession* pSession, MSG_BASE* pMsg, int nSize ) { MSG_MO_RTTG_ALL_SERVER_STATUS_NTF *pRecvMsg = (MSG_MO_RTTG_ALL_SERVER_STATUS_NTF*)pMsg; if( pRecvMsg->m_Count > MSG_MO_RTTG_ALL_SERVER_STATUS_NTF::MAX_SERVER_COUNT ) return; MSG_SM_SERVER_INFO_CHANGE_CMD MgrMsg; MgrMsg.m_Count = 0; for( int i = 0; i < pRecvMsg->m_Count; i++ ) { #ifdef __20080310__CHANGE_SET_SERVERKEY SERVER_KEY key( pRecvMsg->m_ServerConnectInfo[i].m_ServerKey); #endif UnitServer *pUnitServer = WorldManager::Instance()->FindUnitServer( key ); if( !pUnitServer ) { MSGOUT( "[MO_RTTG_ALL_SERVER_STATUS_NTF] Can't Find UnitServer[%d %d %d %d] \n", pRecvMsg->m_ServerConnectInfo[i].m_ServerKey.GetWorldID(), pRecvMsg->m_ServerConnectInfo[i].m_ServerKey.GetChannelID(), pRecvMsg->m_ServerConnectInfo[i].m_ServerKey.GetServerType(), pRecvMsg->m_ServerConnectInfo[i].m_ServerKey.GetServerID() ); continue; } // ÇØ´ç¼­¹öÀÇ ON/OFF Á¤º¸¸¦ °»½ÅÇÑ´Ù. pUnitServer->GetServerInfo().SetServerStatus( (eSERVER_STATUS)pRecvMsg->m_ServerConnectInfo[i].m_bConnected ); // UpdateManager¿¡ ¾Ë·ÁÁÙ ¼­¹öÁ¤º¸¸¦ ¼ÂÆÃÇÑ´Ù. pUnitServer->GetServerInfo().SerializeStream( MgrMsg.m_ServerInfoEx[MgrMsg.m_Count], FALSE ); MSGOUT( "[MO_RTTG_ALL_SERVER_STATUS_NTF] ServerKey[%d] Connected[%d]\n", MgrMsg.m_ServerInfoEx[MgrMsg.m_Count].m_dwServerKey, MgrMsg.m_ServerInfoEx[MgrMsg.m_Count].m_byStatus ); MgrMsg.m_Count++; } // ¼­¹ö¿¡ Á¢¼ÓµÇ¾î ÀÖ´Â ¸ðµç User(Manager)¿¡ ¼­¹ö»óÅ º¯°æÀ» ¾Ë¸°´Ù. if( MgrMsg.m_Count ) UserManager::Instance()->SendPacketAll( &MgrMsg, MgrMsg.GetSize() ); }