-
Notifications
You must be signed in to change notification settings - Fork 0
/
PlayerList.js
104 lines (91 loc) · 3.11 KB
/
PlayerList.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
const Player = require('./Player');
class PlayerList {
constructor() {
this.players = []; // of class Player
}
addPlayer(playerName, client) {
var existingPlayerIndex = this.findIndexByName(playerName);
if (existingPlayerIndex == -1) {
// Player does not exist, add.
var player = new Player(client, playerName);
this.players.push(player);
client.on('disconnect', () => {
// When detecting a disconnect, remove socket
player.client = null;
});
return {
status: true,
player: player,
};
} else {
var existingPlayer = this.players[existingPlayerIndex];
// Player with same name already in room. Check if just stale socket (reconnect)
if (existingPlayer.getSeat() != null && existingPlayer.client == null) {
// Player exists and socket is stale. Reassign socket.
existingPlayer.client = client;
client.on('disconnect', () => {
// When detecting a disconnect, remove socket
existingPlayer.client = null;
});
return {
status: true,
player: existingPlayer
}
} else {
// Present, but is unseated.
return {
status: false,
message: "unseated player already there",
}
}
}
}
getPlayerByName(playerName) {
var existingPlayerIndex = this.findIndexByName(playerName);
return this.players[existingPlayerIndex];
}
getPlayerBySeat(seatNo) {
var result = this.players.find( (player) => { return player.seat == seatNo } );
return result;
}
removePlayerByClient(playerName, client) {
var existingPlayerIndex = this.findByClient(client);
if (existingPlayerIndex != -1 ) {
this.players.splice(existingPlayerIndex,1);
}
return {
status: true
};
}
removePlayerByName(playerName) {
var existingPlayerIndex = this.findIndexByName(playerName);
if (existingPlayerIndex != -1) {
this.players.splice(existingPlayerIndex,1);
}
return {
status: true
};
}
findIndexByName(name) {
return this.players.findIndex( (player) => { return player.name == name } );
}
findIndexByClient(client) {
return this.players.findIndex( (player) => { return player.client == client} );
}
getTotalNumber() {
return this.players.length;
}
getTotalNumberSeated() {
return this.getAllSeatedPlayers().length;
}
getTotalNumberUnseated() {
return this.players.filter( (player) => {return player.seat === null } ).length;
}
getAllPlayers() {
return this.players;
}
getAllSeatedPlayers() {
return this.players.filter( (player) => { return player.seat !== null } );
}
}
module.exports = PlayerList;