Remove intermediate name->key hash by using custom comparison function

This commit is contained in:
Sasha 2018-04-13 10:42:11 +02:00
parent eb2fd7a7cb
commit a8f951fad4
1 changed files with 6 additions and 8 deletions

View File

@ -1,7 +1,6 @@
function Room(domElem, lib) { function Room(domElem, lib) {
var players = {}; var players = {};
var keysByName = {}; var sortedKeys = [];
var logins = [];
var session = { var session = {
key: null, key: null,
loggedIn: false, loggedIn: false,
@ -12,6 +11,7 @@ function Room(domElem, lib) {
e.preventDefault(); e.preventDefault();
lib.send({tag: "Invitation", to: session.selected}) lib.send({tag: "Invitation", to: session.selected})
}); });
var compareKeysByLogin = lib.funMap(function(key) {return players[key].name;}, lib.defaultCompare);
return { return {
populate: populate, populate: populate,
@ -51,12 +51,11 @@ function Room(domElem, lib) {
function enter(key, name) { function enter(key, name) {
var player = Player(key, name); var player = Player(key, name);
keysByName[name] = key;
players[key] = player; players[key] = player;
player.position = lib.insert(name, logins); player.position = lib.insert(key, sortedKeys, compareKeysByLogin);
beforePlayer = players[keysByName[logins[player.position]]]; beforePlayer = players[sortedKeys[player.position]];
playersList.insertBefore(player.dom, beforePlayer && beforePlayer.dom); playersList.insertBefore(player.dom, beforePlayer && beforePlayer.dom);
logins.splice(player.position, 0, name); sortedKeys.splice(player.position, 0, key);
} }
function leave(key) { function leave(key) {
@ -68,8 +67,7 @@ function Room(domElem, lib) {
} }
if(player != undefined) { if(player != undefined) {
playersList.removeChild(player.dom); playersList.removeChild(player.dom);
logins.splice(player.position, 1); sortedKeys.splice(player.position, 1);
delete keysByName[player.name]
delete players[key]; delete players[key];
} }
} }