Reduce the number of lobby gamelist updates by roughly 60-80% by eliminating duplicate packets, refs #3847.

This was SVN commit r17943.
This commit is contained in:
elexis 2016-03-24 12:08:00 +00:00
parent 572847ddd4
commit 58d3425ad4

View File

@ -186,6 +186,11 @@ var g_MapData = {};
// tick handler
var g_LoadingState = 0; // 0 = not started, 1 = loading, 2 = loaded
/**
* Only send a lobby update if something actually changed.
*/
var g_LastGameStanza;
/**
* Initializes some globals without touching the GUI.
*
@ -1769,9 +1774,9 @@ function sendRegisterGameStanza()
let mapSize = g_GameAttributes.mapType == "random" ? Engine.GetGUIObjectByName("mapSize").list_data[selectedMapSize] : "Default";
let victoryCondition = Engine.GetGUIObjectByName("victoryCondition").list[selectedVictoryCondition];
let playerNames = Object.keys(g_PlayerAssignments).map(guid => g_PlayerAssignments[guid].name);
let playerNames = Object.keys(g_PlayerAssignments).map(guid => g_PlayerAssignments[guid].name).sort();
Engine.SendRegisterGame({
let stanza = {
"name": g_ServerName,
"mapName": g_GameAttributes.map,
"niceMapName": getMapDisplayName(g_GameAttributes.map),
@ -1781,5 +1786,12 @@ function sendRegisterGameStanza()
"nbp": Object.keys(g_PlayerAssignments).length || 1,
"tnbp": g_GameAttributes.settings.PlayerData.length,
"players": playerNames.join(", ")
});
};
// Only send the stanza if the relevant settings actually changed
if (g_LastGameStanza && Object.keys(stanza).every(prop => g_LastGameStanza[prop] == stanza[prop]))
return;
g_LastGameStanza = stanza;
Engine.SendRegisterGame(stanza);
}