void NFCWorldNet_ServerModule::OnRefreshProxyServerInfoProcess(const NFSOCK nSockIndex, const int nMsgID, const char* msg, const uint32_t nLen) { NFGUID nPlayerID; NFMsg::ServerInfoReportList xMsg; if (!m_pNetModule->ReceivePB( nMsgID, msg, nLen, xMsg, nPlayerID)) { return; } for (int i = 0; i < xMsg.server_list_size(); ++i) { const NFMsg::ServerInfoReport& xData = xMsg.server_list(i); NF_SHARE_PTR<ServerData> pServerData = mProxyMap.GetElement(xData.server_id()); if (!pServerData) { pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); mProxyMap.AddElement(xData.server_id(), pServerData); } pServerData->nFD = nSockIndex; *(pServerData->pData) = xData; m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFGUID(0, xData.server_id()), xData.server_name(), "Proxy Registered"); SynGameToProxy(nSockIndex); } }
int NFCWorldNet_ServerModule::OnGameServerRegisteredProcess(const NFIPacket& msg) { NFIDENTID nPlayerID; NFMsg::ServerInfoReportList xMsg; if (!RecivePB(msg, xMsg, nPlayerID)) { return 0; } for (int i = 0; i < xMsg.server_list_size(); ++i) { NFMsg::ServerInfoReport* pData = xMsg.mutable_server_list(i); NF_SHARE_PTR<ServerData> pServerData = mGameMap.GetElement(pData->server_id()); if (!pServerData.get()) { pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); mGameMap.AddElement(pData->server_id(), pServerData); } pServerData->nFD = msg.GetFd(); *(pServerData->pData) = *pData; m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFIDENTID(0, pData->server_id()), pData->server_name(), "GameServerRegistered"); } SynGameToProxy(); return 0; }
void NFCWorldNet_ServerModule::OnClientDisconnect( const int nAddress ) { //不管是game还是proxy都要找出来,替他反注册 NF_SHARE_PTR<ServerData> pServerData = mGameMap.First(); while (pServerData.get()) { if (nAddress == pServerData->nFD) { pServerData->pData->set_server_state(NFMsg::EST_CRASH); pServerData->nFD = 0; SynGameToProxy(); return; } pServerData = mGameMap.Next(); } ////////////////////////////////////////////////////////////////////////// int nServerID = 0; pServerData = mProxyMap.First(); while (pServerData) { if (nAddress == pServerData->nFD) { nServerID = pServerData->pData->server_id(); break; } pServerData = mProxyMap.Next(); } mProxyMap.RemoveElement(nServerID); }
void NFCWorldNet_ServerModule::SynGameToProxy() { NFMsg::ServerInfoReportList xData; NF_SHARE_PTR<ServerData> pServerData = mProxyMap.First(); while (pServerData) { SynGameToProxy(pServerData->nFD); pServerData = mProxyMap.Next(); } }
bool NFCWorldNet_ServerModule::Execute() { if (mnLastCheckTime + 10 > GetPluginManager()->GetNowTime()) { return true; } SynDBToGame(); SynGameToProxy(); SynWorldToProxy(); SynWorldToGame(); SynWorldToDB(); LogGameServer(); return true; }
void NFCWorldNet_ServerModule::OnClientDisconnect(const NFSOCK nAddress) { NF_SHARE_PTR<ServerData> pServerData = mGameMap.First(); while (pServerData) { if (nAddress == pServerData->nFD) { pServerData->pData->set_server_state(NFMsg::EST_CRASH); pServerData->nFD = 0; ServerReport(pServerData->pData->server_id(), NFMsg::EST_CRASH); SynGameToProxy(); break; } pServerData = mGameMap.Next(); } ////////////////////////////////////////////////////////////////////////// pServerData = mProxyMap.First(); while (pServerData) { if (nAddress == pServerData->nFD) { pServerData->pData->set_server_state(NFMsg::EST_CRASH); pServerData->nFD = 0; int nServerID = pServerData->pData->server_id(); mProxyMap.RemoveElement(nServerID); ServerReport(pServerData->pData->server_id(), NFMsg::EST_CRASH); SynGameToProxy(); break; } pServerData = mProxyMap.Next(); } ////////////////////////////////////////////////////////////////////////// pServerData = mDBMap.First(); while (pServerData) { if (nAddress == pServerData->nFD) { pServerData->pData->set_server_state(NFMsg::EST_CRASH); pServerData->nFD = 0; int nServerID = pServerData->pData->server_id(); mDBMap.RemoveElement(nServerID); ServerReport(pServerData->pData->server_id(), NFMsg::EST_CRASH); SynDBToGame(); break; } pServerData = mDBMap.Next(); } }