diff --git a/binaries/data/mods/public/gui/common/network.js b/binaries/data/mods/public/gui/common/network.js index c9d92db2a4..95aab583f4 100644 --- a/binaries/data/mods/public/gui/common/network.js +++ b/binaries/data/mods/public/gui/common/network.js @@ -172,14 +172,10 @@ function getNetworkWarnings() { // Remove outdated messages for (let guid in g_NetworkWarnings) - { - if (Date.now() > g_NetworkWarnings[guid].added + g_NetworkWarningTimeout) + if (Date.now() > g_NetworkWarnings[guid].added + g_NetworkWarningTimeout || + guid != "server" && !g_PlayerAssignments[guid]) delete g_NetworkWarnings[guid]; - if (guid != "server" && !g_PlayerAssignments[guid]) - delete g_NetworkWarnings[guid]; - } - // Show local messages first let guids = Object.keys(g_NetworkWarnings).sort(guid => guid != "server"); diff --git a/source/network/NetClient.cpp b/source/network/NetClient.cpp index 55577b0a4a..a6050ce6f5 100644 --- a/source/network/NetClient.cpp +++ b/source/network/NetClient.cpp @@ -140,9 +140,8 @@ CNetClient::~CNetClient() void CNetClient::TraceMember(JSTracer *trc) { - std::deque >::iterator itr; - for (itr=m_GuiMessageQueue.begin(); itr != m_GuiMessageQueue.end(); ++itr) - JS_CallHeapValueTracer(trc, &*itr, "m_GuiMessageQueue"); + for (JS::Heap& guiMessage : m_GuiMessageQueue) + JS_CallHeapValueTracer(trc, &guiMessage, "m_GuiMessageQueue"); } void CNetClient::SetUserName(const CStrW& username) @@ -278,14 +277,14 @@ void CNetClient::PostPlayerAssignmentsToScript() JS::RootedValue hosts(cx); GetScriptInterface().GetProperty(msg, "hosts", &hosts); - for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it) + for (const std::pair& p : m_PlayerAssignments) { JS::RootedValue host(cx); GetScriptInterface().Eval("({})", &host); - GetScriptInterface().SetProperty(host, "name", std::wstring(it->second.m_Name), false); - GetScriptInterface().SetProperty(host, "player", it->second.m_PlayerID, false); - GetScriptInterface().SetProperty(host, "status", it->second.m_Status, false); - GetScriptInterface().SetProperty(hosts, it->first.c_str(), host, false); + GetScriptInterface().SetProperty(host, "name", std::wstring(p.second.m_Name), false); + GetScriptInterface().SetProperty(host, "player", p.second.m_PlayerID, false); + GetScriptInterface().SetProperty(host, "status", p.second.m_Status, false); + GetScriptInterface().SetProperty(hosts, p.first.c_str(), host, false); } PushGuiMessage(msg); @@ -709,18 +708,17 @@ bool CNetClient::OnClientPerformance(void *context, CFsmEvent* event) return true; CClientPerformanceMessage* message = (CClientPerformanceMessage*)event->GetParamRef(); - std::vector &clients = message->m_Clients; // Display warnings for other clients with bad ping - for (size_t i = 0; i < clients.size(); ++i) + for (size_t i = 0; i < message->m_Clients.size(); ++i) { - if (clients[i].m_MeanRTT < DEFAULT_TURN_LENGTH_MP || clients[i].m_GUID == client->m_GUID) + if (message->m_Clients[i].m_MeanRTT < DEFAULT_TURN_LENGTH_MP || message->m_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->GetScriptInterface().SetProperty(msg, "guid", message->m_Clients[i].m_GUID); + client->GetScriptInterface().SetProperty(msg, "meanRTT", message->m_Clients[i].m_MeanRTT); client->PushGuiMessage(msg); } diff --git a/source/network/NetClient.h b/source/network/NetClient.h index 625c5add5f..5ac7f7e7d6 100644 --- a/source/network/NetClient.h +++ b/source/network/NetClient.h @@ -249,7 +249,7 @@ private: CStr m_GUID; /// Queue of messages for GuiPoll - std::deque > m_GuiMessageQueue; + std::deque> m_GuiMessageQueue; /// Serialized game state received when joining an in-progress game std::string m_JoinSyncBuffer; diff --git a/source/network/NetFileTransfer.cpp b/source/network/NetFileTransfer.cpp index 1bf4da922d..f39a131661 100644 --- a/source/network/NetFileTransfer.cpp +++ b/source/network/NetFileTransfer.cpp @@ -1,3 +1,20 @@ +/* Copyright (C) 2016 Wildfire Games. + * This file is part of 0 A.D. + * + * 0 A.D. is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * 0 A.D. is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 0 A.D. If not, see . + */ + #include "precompiled.h" #include "NetFileTransfer.h" @@ -141,16 +158,18 @@ void CNetFileTransferer::Poll() { // Find tasks which have fewer packets in flight than their window size, // and send more packets - for (FileSendTasksMap::iterator it = m_FileSendTasks.begin(); it != m_FileSendTasks.end(); ++it) + for (std::pair& p : m_FileSendTasks) { - while (it->second.packetsInFlight < it->second.maxWindowSize && it->second.offset < it->second.buffer.size()) + CNetFileSendTask& task = p.second; + + while (task.packetsInFlight < task.maxWindowSize && task.offset < task.buffer.size()) { CFileTransferDataMessage dataMessage; - dataMessage.m_RequestID = it->second.requestID; - ssize_t packetSize = std::min(DEFAULT_FILE_TRANSFER_PACKET_SIZE, it->second.buffer.size() - it->second.offset); - dataMessage.m_Data = it->second.buffer.substr(it->second.offset, packetSize); - it->second.offset += packetSize; - it->second.packetsInFlight++; + dataMessage.m_RequestID = task.requestID; + ssize_t packetSize = std::min(DEFAULT_FILE_TRANSFER_PACKET_SIZE, task.buffer.size() - task.offset); + dataMessage.m_Data = task.buffer.substr(task.offset, packetSize); + task.offset += packetSize; + ++task.packetsInFlight; m_Session->SendMessage(&dataMessage); } } diff --git a/source/network/NetFileTransfer.h b/source/network/NetFileTransfer.h index 6d599de627..9b803816ad 100644 --- a/source/network/NetFileTransfer.h +++ b/source/network/NetFileTransfer.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011 Wildfire Games. +/* Copyright (C) 2016 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -121,7 +121,7 @@ private: u32 m_NextRequestID; - typedef std::map > FileReceiveTasksMap; + typedef std::map> FileReceiveTasksMap; FileReceiveTasksMap m_FileReceiveTasks; typedef std::map FileSendTasksMap; diff --git a/source/network/NetServer.cpp b/source/network/NetServer.cpp index 08fa90e02a..829853765e 100644 --- a/source/network/NetServer.cpp +++ b/source/network/NetServer.cpp @@ -90,11 +90,11 @@ public: // Find the session corresponding to the rejoining host (if any) CNetServerSession* session = NULL; - for (size_t i = 0; i < m_Server.m_Sessions.size(); ++i) + for (CNetServerSession* serverSession : m_Server.m_Sessions) { - if (m_Server.m_Sessions[i]->GetHostID() == m_RejoinerHostID) + if (serverSession->GetHostID() == m_RejoinerHostID) { - session = m_Server.m_Sessions[i]; + session = serverSession; break; } } @@ -157,16 +157,14 @@ CNetServerWorker::~CNetServerWorker() delete m_Stats; - for (size_t i = 0; i < m_Sessions.size(); ++i) + for (CNetServerSession* session : m_Sessions) { - m_Sessions[i]->DisconnectNow(NDR_SERVER_SHUTDOWN); - delete m_Sessions[i]; + session->DisconnectNow(NDR_SERVER_SHUTDOWN); + delete session; } if (m_Host) - { enet_host_destroy(m_Host); - } delete m_ServerTurnManager; } @@ -346,18 +344,13 @@ bool CNetServerWorker::Broadcast(const CNetMessage* message) bool ok = true; // Send to all sessions that are active and has finished authentication - for (size_t i = 0; i < m_Sessions.size(); ++i) - { - if (m_Sessions[i]->GetCurrState() == NSS_PREGAME || m_Sessions[i]->GetCurrState() == NSS_INGAME) - { - if (!m_Sessions[i]->SendMessage(message)) + // TODO: this does lots of repeated message serialisation if we have lots + // of remote peers; could do it more efficiently if that's a real problem + for (CNetServerSession* session : m_Sessions) + if (session->GetCurrState() == NSS_PREGAME || session->GetCurrState() == NSS_INGAME) + if (!session->SendMessage(message)) ok = false; - // TODO: this does lots of repeated message serialisation if we have lots - // of remote peers; could do it more efficiently if that's a real problem - } - } - return ok; } @@ -411,9 +404,9 @@ bool CNetServerWorker::RunStep() JSContext* cx = m_ScriptInterface->GetContext(); JSAutoRequest rq(cx); - std::vector > newAssignPlayer; + std::vector> newAssignPlayer; std::vector newStartGame; - std::vector > newPlayerReady; + std::vector> newPlayerReady; std::vector newPlayerResetReady; std::vector newGameAttributes; std::vector newTurnLength; @@ -432,11 +425,11 @@ bool CNetServerWorker::RunStep() newTurnLength.swap(m_TurnLengthQueue); } - for (size_t i = 0; i < newAssignPlayer.size(); ++i) - AssignPlayer(newAssignPlayer[i].first, newAssignPlayer[i].second); + for (const std::pair& p : newAssignPlayer) + AssignPlayer(p.first, p.second); - for (size_t i = 0; i < newPlayerReady.size(); ++i) - SetPlayerReady(newPlayerReady[i].first, newPlayerReady[i].second); + for (const std::pair& p : newPlayerReady) + SetPlayerReady(p.first, p.second); if (!newPlayerResetReady.empty()) ClearAllPlayerReady(); @@ -456,8 +449,8 @@ bool CNetServerWorker::RunStep() StartGame(); // Perform file transfers - for (size_t i = 0; i < m_Sessions.size(); ++i) - m_Sessions[i]->GetFileTransferer().Poll(); + for (CNetServerSession* session : m_Sessions) + session->GetFileTransferer().Poll(); CheckClientConnections(); @@ -635,8 +628,7 @@ void CNetServerWorker::HandleMessageReceive(const CNetMessage* message, CNetServ } // Update FSM - bool ok = session->Update(message->GetType(), (void*)message); - if (!ok) + if (!session->Update(message->GetType(), (void*)message)) LOGERROR("Net server: Error running FSM update (type=%d state=%d)", (int)message->GetType(), (int)session->GetCurrState()); } @@ -719,9 +711,9 @@ void CNetServerWorker::AddPlayer(const CStr& guid, const CStrW& name) { // Find all player IDs in active use; we mustn't give them to a second player (excluding the unassigned ID: -1) std::set usedIDs; - for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it) - if (it->second.m_Enabled && it->second.m_PlayerID != -1) - usedIDs.insert(it->second.m_PlayerID); + for (const std::pair& p : m_PlayerAssignments) + if (p.second.m_Enabled && p.second.m_PlayerID != -1) + usedIDs.insert(p.second.m_PlayerID); // If the player is rejoining after disconnecting, try to give them // back their old player ID @@ -824,10 +816,10 @@ bool CNetServerWorker::KickPlayer(const CStrW& playerName, const bool ban) void CNetServerWorker::AssignPlayer(int playerID, const CStr& guid) { // Remove anyone who's already assigned to this player - for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it) + for (std::pair& p : m_PlayerAssignments) { - if (it->second.m_PlayerID == playerID) - it->second.m_PlayerID = -1; + if (p.second.m_PlayerID == playerID) + p.second.m_PlayerID = -1; } // Update this host's assignment if it exists @@ -839,16 +831,16 @@ void CNetServerWorker::AssignPlayer(int playerID, const CStr& guid) void CNetServerWorker::ConstructPlayerAssignmentMessage(CPlayerAssignmentMessage& message) { - for (PlayerAssignmentMap::iterator it = m_PlayerAssignments.begin(); it != m_PlayerAssignments.end(); ++it) + for (const std::pair& p : m_PlayerAssignments) { - if (!it->second.m_Enabled) + if (!p.second.m_Enabled) continue; CPlayerAssignmentMessage::S_m_Hosts h; - h.m_GUID = it->first; - h.m_Name = it->second.m_Name; - h.m_PlayerID = it->second.m_PlayerID; - h.m_Status = it->second.m_Status; + h.m_GUID = p.first; + h.m_Name = p.second.m_Name; + h.m_PlayerID = p.second.m_PlayerID; + h.m_Status = p.second.m_Status; message.m_Hosts.push_back(h); } } @@ -955,18 +947,20 @@ bool CNetServerWorker::OnAuthenticate(void* context, CFsmEvent* event) int disconnectedPlayers = 0; int connectedPlayers = 0; // (TODO: if GUIDs were stable, we should use them instead) - for (PlayerAssignmentMap::iterator it = server.m_PlayerAssignments.begin(); it != server.m_PlayerAssignments.end(); ++it) + for (const std::pair& p : server.m_PlayerAssignments) { - if (!it->second.m_Enabled && it->second.m_Name == username) + const PlayerAssignment& assignment = p.second; + + if (!assignment.m_Enabled && assignment.m_Name == username) { - isObserver = it->second.m_PlayerID == -1; + isObserver = assignment.m_PlayerID == -1; isRejoining = true; } - if (it->second.m_PlayerID == -1) + if (assignment.m_PlayerID == -1) continue; - if (it->second.m_Enabled) + if (assignment.m_Enabled) ++connectedPlayers; else ++disconnectedPlayers; @@ -1208,9 +1202,9 @@ bool CNetServerWorker::OnDisconnect(void* context, CFsmEvent* event) void CNetServerWorker::CheckGameLoadStatus(CNetServerSession* changedSession) { - for (size_t i = 0; i < m_Sessions.size(); ++i) + for (const CNetServerSession* session : m_Sessions) { - if (m_Sessions[i] != changedSession && m_Sessions[i]->GetCurrState() != NSS_INGAME) + if (session != changedSession && session->GetCurrState() != NSS_INGAME) return; } @@ -1225,8 +1219,8 @@ void CNetServerWorker::StartGame() { m_ServerTurnManager = new CNetServerTurnManager(*this); - for (size_t i = 0; i < m_Sessions.size(); ++i) - m_ServerTurnManager->InitialiseClient(m_Sessions[i]->GetHostID(), 0); // TODO: only for non-observers + for (const CNetServerSession* session : m_Sessions) + m_ServerTurnManager->InitialiseClient(session->GetHostID(), 0); // TODO: only for non-observers m_State = SERVER_STATE_LOADING; @@ -1289,9 +1283,9 @@ CStrW CNetServerWorker::DeduplicatePlayerName(const CStrW& original) while (true) { bool unique = true; - for (size_t i = 0; i < m_Sessions.size(); ++i) + for (const CNetServerSession* session : m_Sessions) { - if (m_Sessions[i]->GetUserName() == name) + if (session->GetUserName() == name) { unique = false; break; diff --git a/source/network/NetServer.h b/source/network/NetServer.h index 0d3cc8e505..7e5afb9b8b 100644 --- a/source/network/NetServer.h +++ b/source/network/NetServer.h @@ -327,7 +327,7 @@ private: * turn number, to simplify support for rejoining etc. * TODO: verify this doesn't use too much RAM. */ - std::vector > m_SavedCommands; + std::vector> m_SavedCommands; /** * The latest copy of the simulation state, received from an existing @@ -361,9 +361,9 @@ private: bool m_Shutdown; // protected by m_WorkerMutex // Queues for messages sent by the game thread: - std::vector > m_AssignPlayerQueue; // protected by m_WorkerMutex + std::vector> m_AssignPlayerQueue; // protected by m_WorkerMutex std::vector m_StartGameQueue; // protected by m_WorkerMutex - std::vector > m_PlayerReadyQueue; // protected by m_WorkerMutex + std::vector> m_PlayerReadyQueue; // protected by m_WorkerMutex std::vector m_PlayerResetReadyQueue; // protected by m_WorkerMutex std::vector m_GameAttributesQueue; // protected by m_WorkerMutex std::vector m_TurnLengthQueue; // protected by m_WorkerMutex diff --git a/source/network/NetStats.cpp b/source/network/NetStats.cpp index f8e1749ebb..06001e04d5 100644 --- a/source/network/NetStats.cpp +++ b/source/network/NetStats.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2016 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -69,10 +69,9 @@ const std::vector& CNetStatsTable::GetColumns() { m_ColumnDescriptions.clear(); m_ColumnDescriptions.push_back(ProfileColumn("Name", 200)); + if (m_Peer) - { m_ColumnDescriptions.push_back(ProfileColumn("Value", 80)); - } else { CScopeLock lock(m_Mutex); @@ -80,6 +79,7 @@ const std::vector& CNetStatsTable::GetColumns() for (size_t i = 0; i < m_LatchedData.size(); ++i) m_ColumnDescriptions.push_back(ProfileColumn("Peer "+CStr::FromUInt(i), 80)); } + return m_ColumnDescriptions; } diff --git a/source/network/NetStats.h b/source/network/NetStats.h index ef5b875093..1bef7cde75 100644 --- a/source/network/NetStats.h +++ b/source/network/NetStats.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2010 Wildfire Games. +/* Copyright (C) 2016 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -54,7 +54,7 @@ private: std::vector m_ColumnDescriptions; CMutex m_Mutex; - std::vector > m_LatchedData; // protected by m_Mutex + std::vector> m_LatchedData; // protected by m_Mutex }; #endif // INCLUDED_NETSTATS diff --git a/source/network/NetTurnManager.cpp b/source/network/NetTurnManager.cpp index c133cc1b82..9f7a4e0b60 100644 --- a/source/network/NetTurnManager.cpp +++ b/source/network/NetTurnManager.cpp @@ -170,10 +170,9 @@ bool CNetTurnManager::Update(float simFrameLength, size_t maxTurns) // Put all the client commands into a single list, in a globally consistent order std::vector commands; - for (std::map >::iterator it = m_QueuedCommands[0].begin(); it != m_QueuedCommands[0].end(); ++it) - { - commands.insert(commands.end(), std::make_move_iterator(it->second.begin()), std::make_move_iterator(it->second.end())); - } + for (std::pair>& p : m_QueuedCommands[0]) + commands.insert(commands.end(), std::make_move_iterator(p.second.begin()), std::make_move_iterator(p.second.end())); + m_QueuedCommands.pop_front(); m_QueuedCommands.resize(m_QueuedCommands.size() + 1); @@ -214,10 +213,9 @@ bool CNetTurnManager::UpdateFastForward() // Put all the client commands into a single list, in a globally consistent order std::vector commands; - for (std::map >::iterator it = m_QueuedCommands[0].begin(); it != m_QueuedCommands[0].end(); ++it) - { - commands.insert(commands.end(), std::make_move_iterator(it->second.begin()), std::make_move_iterator(it->second.end())); - } + for (std::pair>& p : m_QueuedCommands[0]) + commands.insert(commands.end(), std::make_move_iterator(p.second.begin()), std::make_move_iterator(p.second.end())); + m_QueuedCommands.pop_front(); m_QueuedCommands.resize(m_QueuedCommands.size() + 1); @@ -564,11 +562,11 @@ void CNetReplayTurnManager::DoTurn(u32 turn) m_TurnLength = m_ReplayTurnLengths[turn]; // Simulate commands for that turn - for (const std::pair& pair : m_ReplayCommands[turn]) + for (const std::pair& p : m_ReplayCommands[turn]) { JS::RootedValue command(m_Simulation2.GetScriptInterface().GetContext()); - m_Simulation2.GetScriptInterface().ParseJSON(pair.second, &command); - AddCommand(m_ClientId, pair.first, command, m_CurrentTurn + 1); + m_Simulation2.GetScriptInterface().ParseJSON(p.second, &command); + AddCommand(m_ClientId, p.first, command, m_CurrentTurn + 1); } if (turn == m_FinalTurn) @@ -602,10 +600,10 @@ void CNetServerTurnManager::NotifyFinishedClientCommands(int client, u32 turn) void CNetServerTurnManager::CheckClientsReady() { // See if all clients (including self) are ready for a new turn - for (std::map::iterator it = m_ClientsReady.begin(); it != m_ClientsReady.end(); ++it) + for (const std::pair& clientReady : m_ClientsReady) { - NETTURN_LOG((L" %d: %d <=? %d\n", it->first, it->second, m_ReadyTurn)); - if (it->second <= m_ReadyTurn) + NETTURN_LOG((L" %d: %d <=? %d\n", clientReady.first, clientReady.second, m_ReadyTurn)); + if (clientReady.second <= m_ReadyTurn) return; // wasn't ready for m_ReadyTurn+1 } @@ -640,31 +638,29 @@ void CNetServerTurnManager::NotifyFinishedClientUpdate(int client, const CStrW& // Find the newest turn which we know all clients have simulated u32 newest = std::numeric_limits::max(); - for (std::map::iterator it = m_ClientsSimulated.begin(); it != m_ClientsSimulated.end(); ++it) - { - if (it->second < newest) - newest = it->second; - } + for (const std::pair& clientSimulated : m_ClientsSimulated) + if (clientSimulated.second < newest) + newest = clientSimulated.second; // For every set of state hashes that all clients have simulated, check for OOS - for (std::map >::iterator it = m_ClientStateHashes.begin(); it != m_ClientStateHashes.end(); ++it) + for (const std::pair>& clientStateHash : m_ClientStateHashes) { - if (it->first > newest) + if (clientStateHash.first > newest) break; // Assume the host is correct (maybe we should choose the most common instead to help debugging) - std::string expected = it->second.begin()->second; + std::string expected = clientStateHash.second.begin()->second; // Find all players that are OOS on that turn std::vector OOSPlayerNames; - for (std::map::iterator cit = it->second.begin(); cit != it->second.end(); ++cit) + for (const std::pair& hashPair : clientStateHash.second) { NETTURN_LOG((L"sync check %d: %d = %hs\n", it->first, cit->first, Hexify(cit->second).c_str())); - if (cit->second != expected) + if (hashPair.second != expected) { // Oh no, out of sync m_HasSyncError = true; - OOSPlayerNames.push_back(m_ClientPlayernames[cit->first]); + OOSPlayerNames.push_back(m_ClientPlayernames[hashPair.first]); } } @@ -672,7 +668,7 @@ void CNetServerTurnManager::NotifyFinishedClientUpdate(int client, const CStrW& if (m_HasSyncError) { CSyncErrorMessage msg; - msg.m_Turn = it->first; + msg.m_Turn = clientStateHash.first; msg.m_HashExpected = expected; for (const CStrW& playername : OOSPlayerNames) { diff --git a/source/network/NetTurnManager.h b/source/network/NetTurnManager.h index d426b436a3..806fe77d7c 100644 --- a/source/network/NetTurnManager.h +++ b/source/network/NetTurnManager.h @@ -180,7 +180,7 @@ protected: u32 m_TurnLength; /// Commands queued at each turn (index 0 is for m_CurrentTurn+1) - std::deque > > m_QueuedCommands; + std::deque>> m_QueuedCommands; int m_PlayerId; uint m_ClientId; @@ -272,13 +272,13 @@ protected: void DoTurn(u32 turn); // Contains the commands of every player on each turn - std::map > > m_ReplayCommands; + std::map>> m_ReplayCommands; // Contains the length of every turn std::map m_ReplayTurnLengths; // Contains all replay hash values and weather or not the quick hash method was used - std::map > m_ReplayHash; + std::map> m_ReplayHash; }; /** * The server-side counterpart to CNetClientTurnManager. @@ -337,7 +337,7 @@ protected: std::map m_ClientsSimulated; // Map of turn -> {Client ID -> state hash}; old indexes <= min(m_ClientsSimulated) are deleted - std::map > m_ClientStateHashes; + std::map> m_ClientStateHashes; // Map of client ID -> playername std::map m_ClientPlayernames;