void NFCWorldNet_ServerModule::OnRefreshDBServerInfoProcess(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 = mDBMap.GetElement(xData.server_id()); if (!pServerData) { pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); mDBMap.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"); SynDBToGame(nSockIndex); } }
int NFCMasterNet_ServerModule::OnRefreshWorldInfoProcess(const int nSockIndex, const int nMsgID, const char* msg, const uint32_t nLen) { NFGUID nPlayerID; NFMsg::ServerInfoReportList xMsg; if (!RecivePB(nSockIndex, nMsgID, msg, nLen, xMsg, nPlayerID)) { return 0; } for (int i = 0; i < xMsg.server_list_size(); ++i) { const NFMsg::ServerInfoReport& xData = xMsg.server_list(i); NF_SHARE_PTR<ServerData> pServerData = mWorldMap.GetElement(xData.server_id()); if (!pServerData.get()) { pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); mWorldMap.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(), "RefreshWorldInfo"); } SynWorldToLogin(); return 0; }
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 ProcessAddNetConnect() { std::list<ServerData>::iterator it = mxTempNetList.begin(); for (; it != mxTempNetList.end(); ++it) { const ServerData& xInfo = *it; NF_SHARE_PTR<ServerData> xServerData = mxServerMap.GetElement(xInfo.nGameID); if (xServerData) { //新的信息 if (xInfo.strIP != xServerData->strIP || xInfo.nPort != xServerData->nPort) { //断旧,连新 RemoveServerWeightData(xServerData); xServerData->nGameID = xInfo.nGameID; xServerData->eServerType = xInfo.eServerType; xServerData->strIP = xInfo.strIP; xServerData->strName = xInfo.strName; xServerData->eState = xInfo.eState; xServerData->nPort = xInfo.nPort; //智能指针自己释放 xServerData->mxNetModule = NF_SHARE_PTR<NFINetModule>(NF_NEW NFINetModule()); xServerData->mxNetModule->Initialization(NFIMsgHead::NF_Head::NF_HEAD_LENGTH, this, &NFIClusterClientModule::OnRecivePack, &NFIClusterClientModule::OnSocketEvent, xServerData->strIP.c_str(), xServerData->nPort); } } else { //正常,添加新服务器 xServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); xServerData->nGameID = xInfo.nGameID; xServerData->eServerType = xInfo.eServerType; xServerData->strIP = xInfo.strIP; xServerData->strName = xInfo.strName; xServerData->eState = xInfo.eState; xServerData->nPort = xInfo.nPort; xServerData->mxNetModule = NF_SHARE_PTR<NFINetModule>(NF_NEW NFINetModule()); xServerData->mxNetModule->Initialization(NFIMsgHead::NF_Head::NF_HEAD_LENGTH, this, &NFIClusterClientModule::OnRecivePack, &NFIClusterClientModule::OnSocketEvent, xServerData->strIP.c_str(), xServerData->nPort); mxServerMap.AddElement(xInfo.nGameID, xServerData); } } mxTempNetList.clear(); }
void NFCWorldNet_ServerModule::OnServerInfoProcess(const NFSOCK nSockIndex, const int nMsgID, const char * msg, const uint32_t nLen) { NFGUID nPlayerID; NFMsg::ServerInfoReportList xMsg; if (!NFINetModule::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); if (xData.server_type() == NF_SERVER_TYPES::NF_ST_WORLD) { NF_SHARE_PTR<ServerData> pServerData = mWorldMap.GetElement(xData.server_id()); if (!pServerData) { pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); mWorldMap.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(), "GameServerRegistered"); } } //sync to proxy SynWorldToProxy(); //sync to game SynWorldToGame(); }
void HandleTCPClient(int ClntSocket){ ClientPkt *cp = new ClientPkt(); int RecvMsgSize; // Size of received message // receive filename and number of threads if(recv(ClntSocket, (char*)cp, sizeof(ClientPkt), 0) < 0) { perror("recv() failed"); exit(1); } currentClientPkt = *(cp); currentServerData = ServerData(); // loop through file and find out number of lines std::fstream fin(currentClientPkt.fileName, std::ios::binary | std::ios::in); // get number of lines std::string str; while (!fin.eof()) { getline(fin, str); currentServerData.lineNo++; } // process file pthread_t *thread = new pthread_t[cp->numThreads]; cout << "starting all threads..." << endl; int *temp_arg = new int[cp->numThreads]; for(int i = 0; i < cp->numThreads; i++){ temp_arg[i] = i; int result = pthread_create(&thread[i], NULL, thread_process, static_cast<void*>(&(temp_arg[i]))); if (result !=0) cout << "Error creating thread " << i << ". Return code:" << result << endl; } for(int i = 0; i < cp->numThreads; i++) { pthread_join(thread[i], NULL); } cout << "All threads completed." << endl ; cout << "Filename: " << currentClientPkt.fileName << endl; cout << "No. characters: " << currentServerData.charNo << endl; cout << "No. words: " << currentServerData.wordNo << endl; cout << "No. lines: " << currentServerData.lineNo << endl; cout << "Ave. word length: " << currentServerData.AverageWordLength() << endl; cout << "Largest word: " << currentServerData.longestWord << endl; cout << "Most frequent word: " << currentServerData.MostFrequentWord() << endl; // create server packet ServerPkt serverPkt; currentServerData.TopCharacters(serverPkt.charVal, serverPkt.charNum, 20); strcpy(serverPkt.commonWord, currentServerData.MostFrequentWord().c_str()); serverPkt.aveWordLength = currentServerData.AverageWordLength(); serverPkt.charNo = currentServerData.charNo; serverPkt.lineNo = currentServerData.lineNo; serverPkt.wordNo = currentServerData.wordNo; strcpy(serverPkt.longestWord, currentServerData.longestWord.c_str()); // Send client pkt containing summary data if(send(ClntSocket, (char*)&serverPkt, sizeof(ServerPkt), 0) != sizeof(ServerPkt)){ perror("send() failed"); exit(1); } // =================================== // close(ClntSocket); /* Close client socket */ }
bool NFCMasterNet_ServerModule::AfterInit() { m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_STS_HEART_BEAT, this, &NFCMasterNet_ServerModule::OnHeartBeat); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_WTM_WORLD_REGISTERED, this, &NFCMasterNet_ServerModule::OnWorldRegisteredProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_WTM_WORLD_UNREGISTERED, this, &NFCMasterNet_ServerModule::OnWorldUnRegisteredProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_WTM_WORLD_REFRESH, this, &NFCMasterNet_ServerModule::OnRefreshWorldInfoProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_LTM_LOGIN_REGISTERED, this, &NFCMasterNet_ServerModule::OnLoginRegisteredProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_LTM_LOGIN_UNREGISTERED, this, &NFCMasterNet_ServerModule::OnLoginUnRegisteredProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_LTM_LOGIN_REFRESH, this, &NFCMasterNet_ServerModule::OnRefreshLoginInfoProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_REQ_CONNECT_WORLD, this, &NFCMasterNet_ServerModule::OnSelectWorldProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_ACK_CONNECT_WORLD, this, &NFCMasterNet_ServerModule::OnSelectServerResultProcess); m_pNetModule->AddReceiveCallBack(NFMsg::EGMI_STS_SERVER_REPORT, this, &NFCMasterNet_ServerModule::OnServerReport); m_pNetModule->AddReceiveCallBack(this, &NFCMasterNet_ServerModule::InvalidMessage); m_pNetModule->AddEventCallBack(this, &NFCMasterNet_ServerModule::OnSocketEvent); m_pNetModule->ExpandBufferSize(); NF_SHARE_PTR<NFIClass> xLogicClass = m_pClassModule->GetElement(NFrame::Server::ThisName()); if (xLogicClass) { const std::vector<std::string>& strIdList = xLogicClass->GetIDList(); for (int i = 0; i < strIdList.size(); ++i) { const std::string& strId = strIdList[i]; const int nServerType = m_pElementModule->GetPropertyInt32(strId, NFrame::Server::Type()); const int nServerID = m_pElementModule->GetPropertyInt32(strId, NFrame::Server::ServerID()); if (nServerType == NF_SERVER_TYPES::NF_ST_MASTER && pPluginManager->GetAppID() == nServerID) { const int nPort = m_pElementModule->GetPropertyInt32(strId, NFrame::Server::Port()); const int nMaxConnect = m_pElementModule->GetPropertyInt32(strId, NFrame::Server::MaxOnline()); const int nCpus = m_pElementModule->GetPropertyInt32(strId, NFrame::Server::CpuCount()); const std::string& strName = m_pElementModule->GetPropertyString(strId, NFrame::Server::Name()); const std::string& strIP = m_pElementModule->GetPropertyString(strId, NFrame::Server::IP()); int nRet = m_pNetModule->Initialization(nMaxConnect, nPort, nCpus); if (nRet < 0) { std::ostringstream strLog; strLog << "Cannot init server net, Port = " << nPort; m_pLogModule->LogNormal(NFILogModule::NLL_ERROR_NORMAL, NULL_OBJECT, strLog, __FUNCTION__, __LINE__); NFASSERT(nRet, "Cannot init server net", __FILE__, __FUNCTION__); exit(0); } NFMsg::ServerInfoReport reqMsg; reqMsg.set_server_id(nServerID); reqMsg.set_server_name(strName); reqMsg.set_server_cur_count(0); reqMsg.set_server_ip(strIP); reqMsg.set_server_port(nPort); reqMsg.set_server_max_online(nMaxConnect); reqMsg.set_server_state(NFMsg::EST_NARMAL); reqMsg.set_server_type(nServerType); auto pServerData = NF_SHARE_PTR<ServerData>(NF_NEW ServerData()); *(pServerData->pData) = reqMsg; mMasterMap.AddElement(nServerID, pServerData); } } } return true; }