Fix lobby gamelist issues when clients join and leave a match.
This patch will: - Pass `gameRegisterStanza` to `playerAssignmentsControl` constructor. - Remove handlers for `onClientJoin` and `onClientLeave` from `gameRegisterStanza` class. - Call `gameRegisterStanza` method `sendImmediately` only once after all handlers have run and after updating g_PlayerAssignments . - Remove from `gameRegisterStanza` the dependency on `playerAssignmentsControl` since the `onClientJoin` and `onClientLeave` handlers are removed. Reviewers: Angen, wraitii Accepted By: wraitii Trac Tickets: #5929, #5933 Differential Revision: https://code.wildfiregames.com/D3406 This was SVN commit r24686.
This commit is contained in:
parent
d583048690
commit
8172dbbde0
@ -3,11 +3,12 @@
|
||||
*/
|
||||
class PlayerAssignmentsControl
|
||||
{
|
||||
constructor(setupWindow, netMessages)
|
||||
constructor(setupWindow, netMessages, gameRegisterStanza)
|
||||
{
|
||||
this.clientJoinHandlers = new Set();
|
||||
this.clientLeaveHandlers = new Set();
|
||||
this.playerAssignmentsChangeHandlers = new Set();
|
||||
this.gameRegisterStanza = gameRegisterStanza;
|
||||
|
||||
if (!g_IsNetworked)
|
||||
{
|
||||
@ -102,6 +103,9 @@ class PlayerAssignmentsControl
|
||||
|
||||
g_PlayerAssignments = newAssignments;
|
||||
this.updatePlayerAssignments();
|
||||
// Send at most one gameRegisterStanza after all handlers run in case a
|
||||
// joining observer has been assigned to a playerslot.
|
||||
this.gameRegisterStanza.sendImmediately?.();
|
||||
}
|
||||
|
||||
assignClient(guid, playerIndex)
|
||||
|
@ -5,7 +5,7 @@
|
||||
*/
|
||||
class GameRegisterStanza
|
||||
{
|
||||
constructor(initData, setupWindow, netMessages, gameSettingsControl, playerAssignmentsControl, mapCache)
|
||||
constructor(initData, setupWindow, netMessages, gameSettingsControl, mapCache)
|
||||
{
|
||||
this.mapCache = mapCache;
|
||||
|
||||
@ -20,10 +20,6 @@ class GameRegisterStanza
|
||||
this.lastStanza = undefined;
|
||||
|
||||
// Events
|
||||
let sendImmediately = this.sendImmediately.bind(this);
|
||||
playerAssignmentsControl.registerClientJoinHandler(sendImmediately);
|
||||
playerAssignmentsControl.registerClientLeaveHandler(sendImmediately);
|
||||
|
||||
setupWindow.registerClosePageHandler(this.onClosePage.bind(this));
|
||||
gameSettingsControl.registerGameAttributesBatchChangeHandler(this.onGameAttributesBatchChange.bind(this));
|
||||
netMessages.registerNetMessageHandler("start", this.onGameStart.bind(this));
|
||||
|
@ -27,7 +27,9 @@ class SetupWindow
|
||||
let mapCache = new MapCache();
|
||||
let mapFilters = new MapFilters(mapCache);
|
||||
let gameSettingsControl = new GameSettingsControl(this, netMessages, startGameControl, mapCache);
|
||||
let playerAssignmentsControl = new PlayerAssignmentsControl(this, netMessages);
|
||||
let gameRegisterStanza = Engine.HasXmppClient() &&
|
||||
new GameRegisterStanza(initData, this, netMessages, gameSettingsControl, mapCache);
|
||||
let playerAssignmentsControl = new PlayerAssignmentsControl(this, netMessages, gameRegisterStanza);
|
||||
let readyControl = new ReadyControl(netMessages, gameSettingsControl, startGameControl, playerAssignmentsControl);
|
||||
|
||||
// These class instances control central data and do not manage any GUI Object.
|
||||
@ -39,10 +41,7 @@ class SetupWindow
|
||||
"readyControl": readyControl,
|
||||
"startGameControl": startGameControl,
|
||||
"netMessages": netMessages,
|
||||
"gameRegisterStanza":
|
||||
Engine.HasXmppClient() &&
|
||||
new GameRegisterStanza(
|
||||
initData, this, netMessages, gameSettingsControl, playerAssignmentsControl, mapCache)
|
||||
"gameRegisterStanza": gameRegisterStanza
|
||||
};
|
||||
|
||||
// These are the pages within the setup window that may use the controls defined above
|
||||
|
Loading…
Reference in New Issue
Block a user