#pragma once class GameSSQUpdateCtrl; class User; namespace nsSSQ_Util {}; namespace GameSSQControlInfo { struct SSQ_UPDATER_NODE; }; using namespace nsSSQ; using namespace nsSSQ_Util; using namespace GameSSQControlInfo; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // template< typename _DERIVED, typename _PACKET_T > class BROADCASTER_MSG_CG : public nsSSQ_Util::xxxSender< _DERIVED, _PACKET_T > { public: typedef BROADCASTER_MSG_CG<_DERIVED, _PACKET_T> this_type; inline packet_structure* const GetPacket() { return m_pPacket; } public: VOID ProcessAllUser() const { UserManager* const pUSRMGR = UserManager::Instance(); const USER_HASH& rList = pUSRMGR->RefUserList(); const WORD size = m_pPacket->GetSize(); FOREACH_CONTAINER( const USER_HASH::value_type& rNode, rList, USER_HASH ) { User* const pUser = rNode.second; pUser->SendPacket( m_pPacket, size ); } //pUSRMGR->Foreach( &this_type::SendPacket, this ); //printf( "%p\t%u\n" // , const_cast( m_pPacket ) // , m_PacketSize // ); } }; class BROADCASTER_MSG_CG_STATUS_SSQ_INFO_BRD : public BROADCASTER_MSG_CG< BROADCASTER_MSG_CG_STATUS_SSQ_INFO_BRD, MSG_CG_STATUS_SSQ_INFO_BRD > { }; template< typename _DERIVED, typename _PACKET_T > class UNICASTER_BETWEEN_SERVER : public nsSSQ_Util::xxxSender< _DERIVED, _PACKET_T > { public: typedef UNICASTER_BETWEEN_SERVER<_DERIVED, _PACKET_T> this_type; inline packet_structure* const GetPacket() { return m_pPacket; } public: BOOL SendPacket( ServerSession* const pServerSession, const KEYTYPE KeyOfSSQ ) const { m_pPacket->m_dwKey = KeyOfSSQ; pServerSession->SendPacket( m_pPacket, m_pPacket->GetSize() ); //printf( "%p\t%u\n" // , const_cast( m_pPacket ) // , m_PacketSize // ); } }; class BROADCASTER_MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD : public UNICASTER_BETWEEN_SERVER< BROADCASTER_MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD, MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD > { }; //template< typename _DRIVED, typename _PACKET > //class BROADCASTER_IN_GAMESERVER : public Broadcaster< _DRIVED, _PACKET > //{ // typedef BROADCASTER_IN_GAMESERVER<_DRIVED, _PACKET> this_type; //public: // inline MSG_BASE* GetPacketMsgHeader() { return m_pPacket; } // inline WORD GetPacketMsgSize() { return m_PacketSize = m_pPacket->GetSize();; } // // SSQ_MSG_SCT_HDR* m_pMsgHeader; // WAR_TAG_P m_pOffset; //public: // inline VOID Reset() // { // new (this) this_type(); // m_pOffset = MakeInit_SSQPacketStream( m_pMsgHeader ); // } // // inline SSQ_MSG_SCT_HDR*& RefMsgHeader() { return m_pMsgHeader; } // inline WAR_TAG_P& RefMsgOffset() { return m_pOffset; } //}; // class BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD : public UNICASTER_BETWEEN_SERVER< BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD, MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD > { }; class BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD : public UNICASTER_BETWEEN_SERVER< BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD, MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD> { }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // struct SSQUserInfoHanlder { DWORD SeqIndex; // UserKey <-> Idx DWORD UserKey; SSQInfo* pSSQInfo; User* pUser; }; // SSQInfoµéÀ» ó¸®ÇÏ´Â ·çƾ... Update, Serializable Data Container struct SSQInfoHanlder { //typedef STLX_VECTOR }; //¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ // // class SSQMsgRouterInGame : public WarMsgRouter { friend struct WarMsgRouter; struct GAME_SSQ_MSG_ROUTER_IMPL_Info : sun_type_info { }; public: typedef GAME_SSQ_MSG_ROUTER_IMPL_Info router_info; BROADCASTER_MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD& m_msgCMD_AG; BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD& m_msgCMD_CG; BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD& m_msgBRD_CG; GameSSQUpdateCtrl* m_pUpdateCtrl; public: SSQMsgRouterInGame() : m_msgCMD_AG(*new BROADCASTER_MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD) , m_msgCMD_CG(*new BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD) , m_msgBRD_CG(*new BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD) , m_pUpdateCtrl( 0 ) { m_msgCMD_AG.Reset(); m_msgCMD_CG.Reset(); m_msgBRD_CG.Reset(); } ~SSQMsgRouterInGame() { delete &m_msgCMD_AG; delete &m_msgCMD_CG; delete &m_msgBRD_CG; m_pUpdateCtrl = NULL; } public: inline VOID SetUpdateCtrl( GameSSQUpdateCtrl* const pCtrl ) { m_pUpdateCtrl = pCtrl; } inline GameSSQUpdateCtrl* GetUpdateCtrl() { return m_pUpdateCtrl; } public: inline BROADCASTER_MSG_AG_ZONE_SSQ_ROOM_CTRL_CMD& GetCMD_AG() { return m_msgCMD_AG; } inline BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_CTRL_CMD& GetCMD_CG() { return m_msgCMD_CG; } inline BROADCASTER_MSG_CG_ZONE_EX_SSQ_ROOM_INFO_BRD& GetBRD_CG() { return m_msgBRD_CG; } private: VOID SlotUpdate(); public: VOID SlotClear( User* const pUser ); //__NA000000_090716_HIGH_LOAD_BALANCED_NETWORK_TUNEUP__ public: VOID Update( const SSQInfo::INDEX_T IDofSSQ ); BOOLEAN Routing( const WAR_TAG_P IN pMsg, const WAR_MSG_HDR IN header ); //private: VOID NodeUpdate( const sNODE& rNode ) // { // //ISSQHandler* const pISSQHandler = sNODE::GetStorage( rNode ); // //if( FALSE == pISSQHandler->Update() ) // //{ // // ReleaseNode( rNode ); // //} // } #undef SSQ_MODE_NODE #define SSQ_MODE_NODE( protocol ) \ BOOL On##protocol( const nsSSQ::SSQ_MSG_##protocol& rMsg ) { \ printf( "OnRecv " #protocol "\n" ); \ BYTE* ptr = (BYTE*)&rMsg; \ BYTE* ptrend = ptr+sizeof(rMsg); \ for( ; ptr != ptrend ; ++ptr ) \ printf( "[%03u]", *ptr ); \ puts(""); \ return TRUE; \ } public: ////¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬¦¬ //// Server<->Server (A<->G) SSQ_MESSAGE_HANDLERs //SSQ_MSG_HANDLER_IMPL( SSQ_S2S_GAMBLE_START ) //{ // WAVERIX_DEBUGGING_OUTPUTnV( 0 ); // GameInstanceDungeon* const pDungeonSSQ = m_pUpdateCtrl->GetSSQField(); // // ´ç÷ÀÚ °è»ê ¹× ¹Ù·Î Clientµé·Î °øÁö - ¿¡´Ï¸ÞÀÌ¼Ç ¿¬Ãâ ÈÄ °á°ú º¸¿©ÁÖ´Â ÇüÅ·ΠŬ¶ó ±¸¼º // // send to players - ÀÌ°Ç GameServer¿¡¼­ º¸³»´Â ÇüÅ·ΠÇÏÀÚ. CharNameµîµî Á¤º¸ ´ã¾Æ¼­ // { // SSQ_MSG_SCT_HDR*& rHdrPtr = m_msgCMD_AG.RefMsgHeader(); // WAR_TAG_P& rpOffset = m_msgCMD_AG.RefMsgOffset(); // SSQ_MSG_GNM_GAMBLE_DRAWING msg0; // rpOffset = SSQ_Serialize( msg0, rpOffset, rHdrPtr->hdr ); // }; // return TRUE; //}; public: // __DISABLE_COPY(SSQMsgRouterInGame); }; namespace GameSSQControlInfo { typedef SSQMsgRouterInGame::router_info router_info; };