114 lines
2.8 KiB
C++
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];
|
|
};
|
|
|