#include "stdafx.h" #include "Logic.PeriodicWork.h" #include #include #include "LogicFlowController.h" #include #include #include #include BOOL IPeriodicWork::DoInit() { m_pUser->SetPeriodicWork(this); m_HEARTBEAT_TIMER_forAGENT.Disabled(); m_HEARTBEAT_TIMER_forWORLD.Disabled(); m_CONNECTION_TIMER_forWORLD.Disabled(); return TRUE; } BOOL IPeriodicWork::DoProcess() { if(!(m_pUser && m_pUser->GetPeriodicWork())) return TRUE; UserSessionMgr& rMGR = m_pUser->GetSessionMgr(); SEND_MESSAGE_BLOCK& rSEND_BLK = m_pUser->SEND_MSG(); if(m_HEARTBEAT_TIMER_forAGENT.IsExpired()) { DEBUGGING_CODE_L3(""); MSG_CG_CONNECTION_HEARTBEAT_SYN& rMsgSYN = rSEND_BLK.InstanceOf(); rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN)); m_HEARTBEAT_TIMER_forAGENT.SetNextTimeoutByCurTickBased(INTERVAL_HEARTBEAT); } if(m_HEARTBEAT_TIMER_forWORLD.IsExpired()) { MSG_CW_HEARTBEAT& rMsgSYN = rSEND_BLK.InstanceOf(); rMGR.SendPacket(WORLD_SESSION, &rMsgSYN, sizeof(rMsgSYN)); m_HEARTBEAT_TIMER_forWORLD.SetNextTimeoutByCurTickBased(INTERVAL_HEARTBEAT); } if(m_CONNECTION_TIMER_forWORLD.IsExpired()) { ServerSessionWorldServer* pWORLD = (ServerSessionWorldServer*)rMGR.GetSession(WORLD_SESSION); if(!pWORLD) return TRUE; BOOL bPass = (BOOL)(pWORLD->IsConnected() || pWORLD->IsConnecting()); if(!bPass) { DEBUGGING_CODE_L3(""); MSG_CG_PREPARE_WORLD_CONNECT_SYN& rMsgSYN = rSEND_BLK.InstanceOf(); rMGR.SendPacket(AGENT_SESSION, &rMsgSYN, sizeof(rMsgSYN)); m_CONNECTION_TIMER_forWORLD.SetNextTimeoutByCurTickBased(INTERVAL_WORLD_CONNECT_SYN); } } //BYTE* rpSendingData; //WORD rwSendingSize; //ISecureWorkNode* pWORKNODE = CryptManager::GetISecureWorkNode(); //if(pWORKNODE->DoEarlyProcess(rpSendingData, rwSendingSize)) // rMSG.SendPacket(AGENT_SESSION, rpSendingData, rwSendingSize); //if(pWORKNODE->DoLatelyProcess(rpSendingData, rwSendingSize)) // rMSG.SendPacket(AGENT_SESSION, rpSendingData, rwSendingSize); #ifdef __NA000630_070817_MOLA_5th_UPDATE DWORD dwDeltaTick = GetTickCount(); ISecureWorkNode::Update(dwDeltaTick); #endif // return TRUE; } BOOL IPeriodicWork::IsComplete() { return (BOOL)!(m_pUser && m_pUser->GetPeriodicWork()); } BOOL IPeriodicWork::DoRelease() { return TRUE; } void IPeriodicWork::OnMsg(sSIG_MSG* pSIG_MSG) { sSIG_WISEBASE& rSIG_BASE = *(sSIG_WISEBASE*)pSIG_MSG; if(eSIG_WISEMSG::NOTIFY_SIGNAL != rSIG_BASE.SIGTYPE()) return; sSIG_NOTIFY& rNOTIFY = *(sSIG_NOTIFY*)pSIG_MSG; eWISESUBTYPE eSubType = rNOTIFY.SUBTYPE(); switch(eSubType) { case sSIG_NOTIFY::NTF_SESSION_ON_CONNECTED_AGENTSERVER: m_HEARTBEAT_TIMER_forAGENT.SetNextTimeoutByCurTickBased(INTERVAL_HEARTBEAT); m_CONNECTION_TIMER_forWORLD.SetNextTimeoutByCurTickBased(INTERVAL_WORLD_CONNECT_SYN); break; case sSIG_NOTIFY::NTF_SESSION_ON_CONNECTED_WORLDSERVER: m_HEARTBEAT_TIMER_forWORLD.SetNextTimeoutByCurTickBased(INTERVAL_HEARTBEAT); m_CONNECTION_TIMER_forWORLD.Disabled(); break; case sSIG_NOTIFY::NTF_SESSION_ON_DISCONNECTED_AGENTSERVER: m_HEARTBEAT_TIMER_forAGENT.Disabled(); m_CONNECTION_TIMER_forWORLD.Disabled(); break; case sSIG_NOTIFY::NTF_SESSION_ON_DISCONNECTED_WORLDSERVER: m_HEARTBEAT_TIMER_forWORLD.Disabled(); m_CONNECTION_TIMER_forWORLD.SetNextTimeoutByCurTickBased(INTERVAL_WORLD_CONNECT_SYN); break; case sSIG_NOTIFY::NTF_USER_RELEASED: m_pUser = NULL; break; } } ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////