#include "stdafx.h" #include #include "ServerSession.h" #include "ServerFrame.h" #include #include #include ServerSession::ServerSession(void) { Clear(); } ServerSession::~ServerSession(void) { } void ServerSession::Clear() { m_dwSessionIndex = 0; m_wConnectPort = 0; //< ¿¬°áÇÒ PORT connected_ = false; //< ¿¬°áµÇ¾ú´ÂÁö ¿©ºÎ is_connector_ = false; //< ¼¼¼ÇÀÇ Æ¯¼ºÀº ¿¬°áÇüÀΰ¡? manual_connect_mode_ = true; m_HeartBeatTimer.SetTimer(KEEP_ALIVE_DEFAULT_TIME); m_HeartBeatTimer.DisableCheckTime(); connecting_ = false; } void ServerSession::Init() { Clear(); } void ServerSession::Release() { Clear(); } void ServerSession::Update() { if( IsConnected() && IsConnector() ) { if( m_HeartBeatTimer.IsExpired() ) { SendHeartbeatPacket(); } } else { } } void ServerSession::OnConnect( BOOL bSuccess, DWORD index ) { NetworkObject::OnConnect( bSuccess, index ); manual_connect_mode_ = false; //< ¿¬°á ½Ãµµ¸¦ ÀÌ¹Ì Çß´Ù(Connect()°¡ È£ÃâµÊ)´Â ÀǹÌÀ̹ǷÎ, FALSE connecting_ = false; //< ¿¬°á ½Ãµµ°¡ ³¡³µ´Ù´Â ÀÇ¹Ì if( bSuccess ) { OnConnectSuccess( index ); GetFrame()->SendServerType( this ); } else { } } void ServerSession::OnConnectSuccess( DWORD index ) { GetFrame()->RemoveConnectionlessConnector( GetSessionIndex() ); SetConnected(true); //< ¿¬°áµÇ¾ú´Ù. SetIsConnector(true); //< ¿¬°áÇü SetSessionIndex( index ); GetFrame()->AddSession( GetSessionIndex(), this ); m_HeartBeatTimer.Reset(); SUNLOG( eCRITICAL_LOG, "[Connect][%u] %s connected!", index, GetServerType2String(GetServerType()) ); } // CHANGES: f110617.1L, the sub-sessions can control first_contact_msg as the needs void ServerSession::OnRedirect(DWORD session_index, MSG_SERVER_TYPE* const first_contact_msg) { __UNUSED((first_contact_msg)); // default do not control this argument. SetConnected(true); SetIsConnector(false); SetSessionIndex(session_index); assert(session_index == GetSessionIndex()); m_pFrame->AddSession(session_index, this); SUNLOG(eCRITICAL_LOG, _T("[Redirect][%u] %s[%s] redirected!"), session_index, GetServerType2String(GetServerType()), GetIP()); } void ServerSession::OnAccept( DWORD index ) { NetworkObject::OnAccept( index ); SetConnected(true); SetIsConnector(false); SetSessionIndex( index ); GetFrame()->AddSession( GetSessionIndex(), this ); if( GetServerType() != CLIENT_SERVER ) { SUNLOG( eCRITICAL_LOG, "[Connect][%u] %s[%s] accepted!", index, GetServerType2String(GetServerType()), GetIP() ); } } void ServerSession::OnDisconnect() { if( GetServerType() != CLIENT_SERVER ) { SUNLOG( eCRITICAL_LOG, "[Connect][%u] %s[%s] disconnected!", GetSessionIndex(), GetServerType2String(GetServerType()), IPOperation::ConvertDWORD2StrIP(GetTempIPAddress()) ); } NetworkObject::OnDisconnect(); m_HeartBeatTimer.DisableCheckTime(); SetConnected(false); GetFrame()->RemoveSession( GetSessionIndex() ); if( IsConnector() ) GetFrame()->AddConnectionlessConnector(this); } void ServerSession::SendHeartbeatPacket() { /* MSG_HEARTBEAT msg; msg.m_byCategory = 0; msg.m_byProtocol = SERVERCOMMON_HEARTBEAT; SendPacket( &msg, sizeof(msg) ); */ } void ServerSession::OnLogString( char *pszLog ) { SUNLOG( eCRITICAL_LOG, "[Session] server[%s] %s", GetServerType2String(GetServerType()), pszLog ); }