Files
Sun1602/Tools/WiseClient/Logic/Logic.PeriodicWork.cpp
T
2022-10-26 12:25:11 +08:00

130 lines
3.8 KiB
C++

#include "stdafx.h"
#include "Logic.PeriodicWork.h"
#include <PacketStruct_CG.h>
#include <PacketStruct_CW.h>
#include "LogicFlowController.h"
#include <Object/WiseUser.h>
#include <Sessions/ServerSession.AgentServer.h>
#include <Sessions/ServerSession.WorldServer.h>
#include <CryptManager_4Client.h>
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<MSG_CG_CONNECTION_HEARTBEAT_SYN>();
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<MSG_CW_HEARTBEAT>();
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<MSG_CG_PREPARE_WORLD_CONNECT_SYN>();
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;
}
}
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////