bool CNetClient::OnClientPerformance(void *context, CFsmEvent* event) { // Performance statistics for one or multiple clients ENSURE(event->GetType() == (uint)NMT_CLIENT_PERFORMANCE); CNetClient* client = (CNetClient*)context; JSContext* cx = client->GetScriptInterface().GetContext(); if (client->GetCurrState() == NCS_LOADING) return true; CClientPerformanceMessage* message = (CClientPerformanceMessage*)event->GetParamRef(); std::vector<CClientPerformanceMessage::S_m_Clients> &clients = message->m_Clients; // Display warnings for other clients with bad ping for (size_t i = 0; i < clients.size(); ++i) { if (clients[i].m_MeanRTT < DEFAULT_TURN_LENGTH_MP || clients[i].m_GUID == client->m_GUID) continue; JS::RootedValue msg(cx); client->GetScriptInterface().Eval("({ 'type':'netwarn', 'warntype': 'client-latency' })", &msg); client->GetScriptInterface().SetProperty(msg, "guid", clients[i].m_GUID); client->GetScriptInterface().SetProperty(msg, "meanRTT", clients[i].m_MeanRTT); client->PushGuiMessage(msg); } return true; }
bool CNetClient::OnClientTimeout(void *context, CFsmEvent* event) { // Report the timeout of some other client ENSURE(event->GetType() == (uint)NMT_CLIENT_TIMEOUT); CNetClient* client = (CNetClient*)context; JSContext* cx = client->GetScriptInterface().GetContext(); if (client->GetCurrState() == NCS_LOADING) return true; CClientTimeoutMessage* message = (CClientTimeoutMessage*)event->GetParamRef(); JS::RootedValue msg(cx); client->GetScriptInterface().Eval("({ 'type':'netwarn', 'warntype': 'client-timeout' })", &msg); client->GetScriptInterface().SetProperty(msg, "guid", std::string(message->m_GUID)); client->GetScriptInterface().SetProperty(msg, "lastReceivedTime", message->m_LastReceivedTime); client->PushGuiMessage(msg); return true; }