#include "stdafx.h" #include #include "ServerSession.h" #include "WorldServer.h" #include "ServerSessionManager.h" #include #include #include #include ServerSession::ServerSession() { #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ // ¼¼¼Ç Ç®À» ¼³Á¤ÇÒ ¶§¸¸ ¼öÇàµÈ´Ù. m_WorkLoadPacketStream.Initialize( WorkLoadPacketStream::c_DefaultUpdateTick, WorkLoadPacketStream::c_DefaultLimitTransferSize ); m_WorkLoad.Initialize(); #endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ } ServerSession::~ServerSession() { } VOID ServerSession::Init() { m_dwSessionIndex = 0; m_dwServerKey = 0; m_wConnectPort = 0; m_bForConnect = FALSE; m_dwLastHeartbeatTick = GetTickCount(); m_bConnection = FALSE; m_strConnectIP.clear(); #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ SetSyncKey( TEMP_SERVER ); #endif } VOID ServerSession::Release() { #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ // ¾Æ¸¶ ¼¼¼Ç Ç®À» ÇØÁ¦ÇÒ °æ¿ì¸¸ ¼öÇàµÉ µí. m_WorkLoadPacketStream.Initialize( WorkLoadPacketStream::c_DefaultUpdateTick, WorkLoadPacketStream::c_DefaultLimitTransferSize ); m_WorkLoad.Release( TRUE ); #endif } VOID ServerSession::Update() { if( IsForConnect() ) { // heartbeat º¸³»±â DWORD dwCurTick = GetTickCount(); if( dwCurTick - m_dwLastHeartbeatTick > 10000 ) { m_dwLastHeartbeatTick = dwCurTick; /*MSG_HEARTBEAT msg; msg.m_byCategory = 0; msg.m_byProtocol = SERVERCOMMON_HEARTBEAT; Send( (BYTE*)&msg, sizeof(MSG_HEARTBEAT) );*/ } } } VOID ServerSession::OnConnect( BOOL bSuccess, DWORD dwNetworkIndex ) { if( bSuccess ) { SetForConnect( TRUE ); SetSessionIndex( dwNetworkIndex ); ServerSessionManager::Instance()->AddServer( this ); m_bConnection = TRUE; SendServerType(); } } VOID ServerSession::OnAccept( DWORD dwNetworkIndex ) { SetForConnect( FALSE ); SetSessionIndex( dwNetworkIndex ); m_bConnection = TRUE; #ifndef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ ServerSessionManager::Instance()->AddServer( this ); MessageOut( eCRITICAL_LOG, "[OnAccept][%u] Accept Server Success(%s) \n", dwNetworkIndex, GetServerType2String(GetServerType()) ); #else //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ ServerSessionManager::Instance()->AddServer( this ); if( ! ( WorldServerInfoParser::Instance()->IsServerInfoFromFile() ) ) { if( WorldServer::Instance()->GetPhaseStatus() == PHASE_SERVICE ) MessageOut( eCRITICAL_LOG, "[OnAccept][%u] Accept Server Success(%s) \n", dwNetworkIndex, GetServerType2String(GetServerType()) ); else this->Disconnect(); } else { MessageOut( eCRITICAL_LOG, "[OnAccept][%u] Accept Server Success(%s) \n", dwNetworkIndex, GetServerType2String(GetServerType()) ); } #endif //__WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ } VOID ServerSession::OnDisconnect() { ServerSessionManager::Instance()->RemoveServer( GetSessionIndex() ); m_bConnection = FALSE; #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ SetSyncKey( TEMP_SERVER ); m_WorkLoadPacketStream.Initialize( WorkLoadPacketStream::c_DefaultUpdateTick, WorkLoadPacketStream::c_DefaultLimitTransferSize ); // À̰ÍÀº ¸ðµç WorkµéÀ» Á¦°ÅÇÏ´Â °ÍÀ̹ǷΠ¿Ã¹Ù¸¥ À§Ä¡¿¡ »ç¿ëµÇÁö ¾ÊÀº °ÍÀÌ´Ù. //WorkLoadManager::ReleaseTaskAll(); m_WorkLoad.Release( TRUE ); #endif } VOID ServerSession::SetAddr( char *pszIP, WORD wPort ) { m_strConnectIP = pszIP; m_wConnectPort = wPort; } VOID ServerSession::SendServerType() { MSG_SERVER_TYPE msg; msg.m_byCategory = SERVERCOMMON; msg.m_byProtocol = SERVERCOMMON_SERVERTYPE; msg.m_byServerType = WORLD_SERVER; Send( (BYTE*)&msg, sizeof(MSG_SERVER_TYPE) ); } #ifdef __WAVERIX_SOLAR_AUTH_SERVER_IMPLEMENTATION__ BOOL ServerSession::IsValidObject( DWORD dwCheckValue ) { return (BOOL)(m_dwSyncKey == dwCheckValue); } BOOL ServerSession::IsValidState( DWORD dwStatusValue ) { DWORD status = (DWORD)WorldServer::Instance()->GetPhaseStatus(); return (BOOL)(status == dwStatusValue); } BOOL ServerSession::SendPacket4Interface( MSG_BASE* pMsg, WORD wSize ) { return Send( (BYTE*)pMsg, wSize ); } #endif VOID ServerSession::OnLogString( char *pszLog ) { SUNLOG( eCRITICAL_LOG, "[SessionLog]Type:%d,%s", GetServerType(), pszLog ); }