int NFCLoginNet_ServerModule::OnLoginResultsEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (3 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return -1; } const int nState = var.Int(0); const NFIDENTID xIdent = var.Object(1); const std::string& strAccount = var.String(2); NF_SHARE_PTR<int> xFD = mxClientIdent.GetElement(xIdent); if (xFD) { if (0 != nState) { //此帐号密码错误或者被封号 //登录失败 NFMsg::AckEventResult xMsg; xMsg.set_event_code(NFMsg::EGEC_ACCOUNTPWD_INVALID); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_LOGIN, xMsg, *xFD); return 0; } NetObject* pNetObject = GetNet()->GetNetObject(*xFD); if (pNetObject) { //记录他登录过 pNetObject->SetConnectKeyState(1); pNetObject->SetAccount(strAccount); } //把服务器列表广播下去 NFMsg::AckEventResult xData; xData.set_event_code(NFMsg::EGEC_ACCOUNT_SUCCESS); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_LOGIN, xData, *xFD); //SynWorldToClient(unAddress); m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFIDENTID(0, *xFD), "Login successed :", strAccount.c_str()); } return 0; }
void NFNetModule::KeepAlive() { if (!m_pNet) { return; } if (m_pNet->IsServer()) { return; } if (nLastTime + 10 > GetPluginManager()->GetNowTime()) { return; } nLastTime = GetPluginManager()->GetNowTime(); NFMsg::ServerHeartBeat xMsg; xMsg.set_count(0); SendMsgPB(NFMsg::EGameMsgID::EGMI_STS_HEART_BEAT, xMsg, 0); }
void NFCGameServerToWorldModule::UnRegister() { NF_SHARE_PTR<NFILogicClass> xLogicClass = m_pLogicClassModule->GetElement("GameServer"); if (xLogicClass.get()) { NFList<std::string>& xNameList = xLogicClass->GetConfigNameList(); std::string strConfigName; if (xNameList.Get(0, strConfigName)) { const int nServerID = m_pElementInfoModule->GetPropertyInt(strConfigName, "ServerID"); const int nPort = m_pElementInfoModule->GetPropertyInt(strConfigName, "Port"); const int nMaxConnect = m_pElementInfoModule->GetPropertyInt(strConfigName, "MaxOnline"); const int nCpus = m_pElementInfoModule->GetPropertyInt(strConfigName, "CpuCount"); const std::string& strName = m_pElementInfoModule->GetPropertyString(strConfigName, "Name"); const std::string& strIP = m_pElementInfoModule->GetPropertyString(strConfigName, "IP"); NFMsg::ServerInfoReportList xMsg; NFMsg::ServerInfoReport* pData = xMsg.add_server_list(); pData->set_server_id(nServerID); pData->set_server_name(strName); pData->set_server_cur_count(0); pData->set_server_ip(strIP); pData->set_server_port(nPort); pData->set_server_max_online(nMaxConnect); pData->set_server_state(NFMsg::EST_MAINTEN); SendMsgPB(NFMsg::EGameMsgID::EGMI_GTW_GAME_UNREGISTERED, xMsg, GetNet()->FD()); m_pLogModule->LogNormal(NFILogModule::NLL_INFO_NORMAL, NFIDENTID(0, pData->server_id()), pData->server_name(), "UnRegister"); } } }
int NFCLoginNet_ServerModule::OnSelectWorldResultsEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (7 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_OBJECT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return -1; } const int nWorldID = var.Int(0); const NFIDENTID xClientIdent = var.Object(1); const int nLoginID = var.Int(2); const std::string& strAccount = var.String(3); const std::string& strWorldAddress = var.String(4); int nPort = var.Int(5); const std::string& strWorldKey = var.String(6); NF_SHARE_PTR<int> xFD = mxClientIdent.GetElement(xClientIdent); if (xFD) { NFMsg::AckConnectWorldResult xMsg; xMsg.set_world_id(nWorldID); xMsg.mutable_sender()->CopyFrom(NFToPB(xClientIdent)); xMsg.set_login_id(nLoginID); xMsg.set_account(strAccount); xMsg.set_world_ip(strWorldAddress); xMsg.set_world_port(nPort); xMsg.set_world_key(strWorldKey); SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_CONNECT_WORLD, xMsg, *xFD); } return 0; }
void NFCWorldNet_ServerModule::SynGameToProxy( const int nFD ) { NFMsg::ServerInfoReportList xData; NF_SHARE_PTR<ServerData> pServerData = mGameMap.First(); while (pServerData.get()) { NFMsg::ServerInfoReport* pData = xData.add_server_list(); *pData = *(pServerData->pData); pServerData = mGameMap.Next(); } SendMsgPB(NFMsg::EGameMsgID::EGMI_STS_NET_INFO, xData, nFD); }
int NFCWorldNet_ServerModule::OnSelectServerEvent(const NFIDENTID& object, const int nEventID, const NFIDataList& var) { if (4 != var.GetCount() || !var.TypeEx(TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_INT, TDATA_TYPE::TDATA_STRING, TDATA_TYPE::TDATA_UNKNOWN)) { return 0; } const int nWorldID = var.Int(0); const int nSenderAddress = var.Int(1); const int nLoginID = var.Int(2); const std::string& strAccount = var.String(3); ////////////////////////////////////////////////////////////////////////// if (InThisWorld(strAccount)) { return 0; } NF_SHARE_PTR<ServerData> pServerData = mProxyMap.First(); if (pServerData.get()) { NFMsg::AckConnectWorldResult xData; xData.set_world_id(nWorldID); xData.set_sender_ip(nSenderAddress); xData.set_login_id(nLoginID); xData.set_account(strAccount); xData.set_world_ip(pServerData->pData->server_ip()); xData.set_world_port(pServerData->pData->server_port()); xData.set_world_key(strAccount); SendMsgPB(NFMsg::EGMI_ACK_CONNECT_WORLD, xData, pServerData->nFD); //结果 NFCDataList varResult; varResult << nWorldID << nSenderAddress << nLoginID << strAccount << pServerData->pData->server_ip() << pServerData->pData->server_port() << strAccount; m_pEventProcessModule->DoEvent(NFIDENTID(), NFED_ON_CLIENT_SELECT_SERVER_RESULTS, varResult); } return 0; }
int NFCMasterNet_ServerModule::OnSelectServerResultProcess(const int nSockIndex, const int nMsgID, const char* msg, const uint32_t nLen) { NFGUID nPlayerID; NFMsg::AckConnectWorldResult xMsg; if (!RecivePB(nSockIndex, nMsgID, msg, nLen, xMsg, nPlayerID)) { return 0; } NF_SHARE_PTR<ServerData> pServerData = mLoginMap.GetElement(xMsg.login_id()); if (!pServerData.get()) { return 0; } //转发送到登录服务器 SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_CONNECT_WORLD, xMsg, pServerData->nFD); return 0; }
void NFCMasterNet_ServerModule::SynWorldToLogin() { NFMsg::ServerInfoReportList xData; NF_SHARE_PTR<ServerData> pServerData = mWorldMap.First(); while (pServerData.get()) { NFMsg::ServerInfoReport* pData = xData.add_server_list(); *pData = *(pServerData->pData); pServerData = mWorldMap.Next(); } //广播给所有loginserver pServerData = mLoginMap.First(); while (pServerData.get()) { SendMsgPB(NFMsg::EGameMsgID::EGMI_STS_NET_INFO, xData, pServerData->nFD); pServerData = mLoginMap.Next(); } }
void NFCLoginNet_ServerModule::SynWorldToClient( const int nFD ) { NFMsg::AckServerList xData; xData.set_type(NFMsg::RSLT_WORLD_SERVER); NFMapEx<int, NFMsg::ServerInfoReport>& xWorldMap = m_pLoginToMasterModule->GetWorldMap(); NFMsg::ServerInfoReport* pWorldData = xWorldMap.FirstNude(); while (pWorldData) { NFMsg::ServerInfo* pServerInfo = xData.add_info(); pServerInfo->set_name(pWorldData->server_name()); pServerInfo->set_status(pWorldData->server_state()); pServerInfo->set_server_id(pWorldData->server_id()); pServerInfo->set_wait_count(0); pWorldData = xWorldMap.NextNude(); } SendMsgPB(NFMsg::EGameMsgID::EGMI_ACK_WORLD_LIST, xData, nFD); }