#pragma once #include // // PACKET STRUCTUREs #include #include // #include #include #include #include #include // #include // //#ifdef _DEBUG # include //#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 PACKET_HANDLER_DELEGATOR; typedef Delegator* PACKET_HANDLER_DELEGATOR_P; typedef Delegator FUNCTION_MAP_DELEGATOR; typedef Delegator 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; // FUNCTION_MAP_DELEGATOR m_FuncMaps[MAX_SESSION]; };