Remove intermediate name->key hash by using custom comparison function
This commit is contained in:
parent
eb2fd7a7cb
commit
a8f951fad4
1 changed files with 6 additions and 8 deletions
14
www/room.js
14
www/room.js
|
@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue