Files
2022-10-26 12:25:11 +08:00

114 lines
2.8 KiB
C++

#pragma once
#include <FunctionMap.h>
//
// PACKET STRUCTUREs
#include <PacketStruct_CG.h>
#include <PacketStruct_CW.h>
//
#include <Sessions/ServerSession.h>
#include <Sessions/ServerSession.LoginFront.h>
#include <Sessions/ServerSession.AgentServer.h>
#include <Sessions/ServerSession.WorldServer.h>
#include <Sessions/UserSessionMgr.h>
//
#include <ScriptLogic/ScriptLogic.Interfaces.h>
//
//#ifdef _DEBUG
# include <CPShowMSG.h>
//#endif
struct PACKET_CONTROL
{
static BOOL m_bShowPacketStream;
static const CPShowFNTable* m_CPShowHandler;
static BOOL GetShowPacketStream() { return m_bShowPacketStream; }
static void SetShowPacketStream(BOOL bSet);
static void ShowPacketStream(MSG_BASE* pBASE, WORD wSize, CHAR* pPrefix);
};
//=======================================================================================================================
// TYPE DEFINITION
typedef void (*PH_fnHandler)(ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG);
struct sPACKET_HANDLER_INFO
{
WORD wCATEGORYnPROTOCOL;
ePHASE_SHIFT ePHASE_SHIFT_T;
PH_fnHandler pfnHandler;
};
struct FUNC_GENERIC : public util::BASE_FUNC
{
ePHASE_SHIFT m_PHASE_SHIFT_T;
PH_fnHandler m_fnHandler;
};
class PacketHandler;
typedef Delegator<PacketHandler> PACKET_HANDLER_DELEGATOR;
typedef Delegator<PacketHandler>* PACKET_HANDLER_DELEGATOR_P;
typedef Delegator<util::FunctionMap> FUNCTION_MAP_DELEGATOR;
typedef Delegator<FUNC_GENERIC> FUNC_GENERIC_DELEGATOR;
//
class PacketHandler
{
public:
PacketHandler();
~PacketHandler();
static void RegisterHandler();
static void ClosePacketHandler();
//
static PACKET_HANDLER_DELEGATOR GetHandler();
//-------------------------------------------------------------------------------------
// ÆÐŶ ÆÄ½Ì <¼­¹ö °£ ¿¬°á>
inline BOOL CanDoProcess(FUNC_GENERIC_DELEGATOR& funcDelegator);
BOOL ParsePacket(eCONNECT_SESSIONS idxSession, ServerSession* pSession, WiseUser* pUser, sSIG_NETMSG* pSIG_NETMSG);
//-------------------------------------------------------------------------------------
public:
class Phase
{
private:
ePHASE_SHIFT m_Phase;
public:
Phase() : m_Phase(PHASE_NOACTION) {}
BOOL Shift(ePHASE_SHIFT phase);
BOOL RegisterHandler(sPACKET_HANDLER_INFO* pINFOs, WORD wCounts);
};
public:
BOOL RegisterHandler(eCONNECT_SESSIONS idxSession, sPACKET_HANDLER_INFO* pINFOs);
private:
void _Initialize();
//FUNC_HASH_DELEGATOR GetHandler(ServerSessionEx* pSession);
private:
void _LockInit() { m_bLock = FALSE; }
BOOL _IsLock() { return m_bLock; }
void _Locking() { m_bLock = TRUE; }
void _UnLocking() { m_bLock = FALSE; }
private:
//
static PACKET_HANDLER_DELEGATOR ms_pInstance;
BOOL m_bLock;
// <COMMON HANDLER CONTAINER>
FUNCTION_MAP_DELEGATOR m_FuncMaps[MAX_SESSION];
};