From 9e58efc00ecfe754f56aa01e1090577feb99e662 Mon Sep 17 00:00:00 2001 From: = Date: Tue, 31 Jul 2018 15:54:02 +0100 Subject: [PATCH] Ability to control players in the lobby Added: * The ability to kick and ban a player from the lobby * The ability to control which players will be part of the competition --- dist/server/Server.d.ts | 2 ++ dist/server/Server.js | 33 ++++++++++++++++++-- dist/server/Server.js.map | 2 +- dist/server/SocketServer.d.ts | 4 ++- dist/server/SocketServer.js | 29 +++++++++++++++++- dist/server/SocketServer.js.map | 2 +- dist/tournament/Tournament.d.ts | 2 +- dist/tournament/model/Lobby.d.ts | 5 ++-- dist/tournament/model/Lobby.js | 1 + dist/tournament/model/Lobby.js.map | 2 +- src/server/Server.ts | 48 ++++++++++++++++++++++++++---- src/server/SocketServer.ts | 35 ++++++++++++++++++++-- src/tournament/model/Lobby.ts | 2 ++ 13 files changed, 148 insertions(+), 19 deletions(-) diff --git a/dist/server/Server.d.ts b/dist/server/Server.d.ts index b2c770c..13cf084 100644 --- a/dist/server/Server.d.ts +++ b/dist/server/Server.d.ts @@ -8,6 +8,8 @@ export default class Server { constructor(options: Options); private onPlayerConnect; private onPlayerDisconnect; + private onLobbyKick; + private onLobbyBan; private onLobbyCreate; private onLobbyJoin; private onLobbyTournamentStart; diff --git a/dist/server/Server.js b/dist/server/Server.js index 28db5fb..6fcf586 100644 --- a/dist/server/Server.js +++ b/dist/server/Server.js @@ -25,6 +25,29 @@ var Server = (function () { }); }); }; + this.onLobbyKick = function (lobbyToken, playerToken) { + _this.log('Player ' + playerToken + ' is being kicked from ' + lobbyToken); + var foundLobby = _this.lobbies.find(function (l) { return l.token === lobbyToken; }); + if (foundLobby == null) { + _this.log('Lobby not found (' + lobbyToken + ')'); + return null; + } + var playerIndex = foundLobby.players.findIndex(function (p) { return p.token === playerToken; }); + foundLobby.players.splice(playerIndex, 1); + return foundLobby; + }; + this.onLobbyBan = function (lobbyToken, playerToken) { + _this.log('Player ' + playerToken + ' is being banned from ' + lobbyToken); + var foundLobby = _this.lobbies.find(function (l) { return l.token === lobbyToken; }); + if (foundLobby == null) { + _this.log('Lobby not found (' + lobbyToken + ')'); + return null; + } + var playerIndex = foundLobby.players.findIndex(function (p) { return p.token === playerToken; }); + foundLobby.players.splice(playerIndex, 1); + foundLobby.bannedPlayers.push(playerToken); + return foundLobby; + }; this.onLobbyCreate = function (creator) { var lobby = new Lobby_1.Lobby(creator); _this.lobbies.push(lobby); @@ -39,6 +62,9 @@ var Server = (function () { _this.log('Lobby not found (' + lobbyToken + ')'); return null; } + if (foundLobby.bannedPlayers.find(function (p) { return p === player.token; })) { + return null; + } if (!spectating && foundLobby.players.find(function (p) { return p.token === player.token; }) == null) { foundLobby.players.push(player); _this.log('Player ' + player.token + ' joined ' + lobbyToken); @@ -50,6 +76,8 @@ var Server = (function () { this.socketServer = new SocketServer_1["default"](this.options.port, { onPlayerConnect: this.onPlayerConnect.bind(this), onPlayerDisconnect: this.onPlayerDisconnect.bind(this), + onLobbyKick: this.onLobbyKick.bind(this), + onLobbyBan: this.onLobbyBan.bind(this), onLobbyCreate: this.onLobbyCreate.bind(this), onLobbyJoin: this.onLobbyJoin.bind(this), onLobbyTournamentStart: this.onLobbyTournamentStart.bind(this), @@ -72,14 +100,15 @@ var Server = (function () { this.addPlayer(player); player.channel.send('waiting'); }; - Server.prototype.onLobbyTournamentStart = function (lobbyToken, tournamentOptions) { + Server.prototype.onLobbyTournamentStart = function (lobbyToken, tournamentOptions, players) { var foundLobby = this.lobbies.find(function (l) { return l.token === lobbyToken; }); if (foundLobby == null) { return null; } if (foundLobby.tournament == null || foundLobby.tournament.isFinished()) { this.log("Starting tournament in lobby " + foundLobby.token + "!"); - foundLobby.tournament = new Tournament_1.Tournament(tournamentOptions, this.socketServer, foundLobby.players, foundLobby.token); + var playersToPlay = foundLobby.players.filter(function (p) { return players.includes(p.token); }); + foundLobby.tournament = new Tournament_1.Tournament(tournamentOptions, this.socketServer, playersToPlay, foundLobby.token); foundLobby.tournament.start(); } return foundLobby; diff --git a/dist/server/Server.js.map b/dist/server/Server.js.map index 12ac562..0572ff9 100644 --- a/dist/server/Server.js.map +++ b/dist/server/Server.js.map @@ -1 +1 @@ -{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/server/Server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/server/SocketServer.d.ts b/dist/server/SocketServer.d.ts index 61a74b6..cf8f19d 100644 --- a/dist/server/SocketServer.d.ts +++ b/dist/server/SocketServer.d.ts @@ -4,9 +4,11 @@ import { TournamentOptions } from '../tournament/Tournament'; export interface SocketEvents { onPlayerConnect(player: Player): void; onPlayerDisconnect(player: Player): void; + onLobbyKick(lobbyToken: string, playerToken: string): Lobby; + onLobbyBan(lobbyToken: string, playerToken: string): Lobby; onLobbyCreate(player: Player): Lobby; onLobbyJoin(player: Player, lobbyToken: string, spectating: boolean): Lobby; - onLobbyTournamentStart(lobbyToken: string, options: TournamentOptions): Lobby; + onLobbyTournamentStart(lobbyToken: string, options: TournamentOptions, players: Array): Lobby; updateStats(): void; } export default class SocketServer { diff --git a/dist/server/SocketServer.js b/dist/server/SocketServer.js index 6ab4453..2cfd965 100644 --- a/dist/server/SocketServer.js +++ b/dist/server/SocketServer.js @@ -43,7 +43,8 @@ var SocketServer = (function () { socket.on('lobby tournament start', function (data) { var token = data.token; var options = Object.assign(constants_1.DEFAULT_TOURNAMENT_OPTIONS, data.options); - var lobby = _this.socketEvents.onLobbyTournamentStart(token, options); + var players = data.players; + var lobby = _this.socketEvents.onLobbyTournamentStart(token, options, players); if (lobby == null) { socket.emit('exception', { error: 'Unable to start tournament' }); } @@ -68,6 +69,32 @@ var SocketServer = (function () { isAdmin: lobby.admin.token === player.token }); }); + socket.on('lobby player kick', function (data) { + var lobbyToken = data.lobbyToken, playerToken = data.playerToken; + var lobby = _this.socketEvents.onLobbyKick(lobbyToken, playerToken); + if (lobby == null) { + socket.emit('exception', { error: 'Unable to kick player' }); + } + else { + _this.io["in"](lobby.token).emit('lobby player kicked', { + lobby: lobby.toObject() + }); + _this.io["in"](playerToken).emit('kicked'); + } + }); + socket.on('lobby player ban', function (data) { + var lobbyToken = data.lobbyToken, playerToken = data.playerToken; + var lobby = _this.socketEvents.onLobbyBan(lobbyToken, playerToken); + if (lobby == null) { + socket.emit('exception', { error: 'Unable to ban player' }); + } + else { + _this.io["in"](lobby.token).emit('lobby player banned', { + lobby: lobby.toObject() + }); + _this.io["in"](playerToken).emit('banned'); + } + }); socket.on('disconnect', function () { _this.socketEvents.onPlayerDisconnect(player); }); diff --git a/dist/server/SocketServer.js.map b/dist/server/SocketServer.js.map index 746f149..3f84a7d 100644 --- a/dist/server/SocketServer.js.map +++ b/dist/server/SocketServer.js.map @@ -1 +1 @@ -{"version":3,"file":"SocketServer.js","sourceRoot":"","sources":["../../src/server/SocketServer.ts"],"names":[],"mappings":";;AAAA,2BAA6B;AAC7B,8BAAgC;AAChC,uBAAyB;AACzB,qDAAgD;AAGhD,uDAAkD;AAClD,yCAAyD;AAsBzD;IAII,sBAAY,IAAY,EAAE,YAA0B;QAApD,iBAuEC;QAtEG,IAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAClB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,UAAC,MAAuB,EAAE,IAAc;YAChD,IAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC;YACvD,IAAI,QAAQ,EAAE;gBACV,OAAO,IAAI,EAAE,CAAC;aACjB;YACO,IAAA,mCAAK,CAA2B;YACxC,IAAI,CAAC,KAAK,EAAE;gBACR,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;aAC3C;YACD,MAAM,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;YACjC,IAAI,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,UAAC,MAAuB;YAC7C,IAAM,aAAa,GAAG,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAM,MAAM,GAAG,IAAI,mBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;YAEvE,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE;gBACtB,IAAM,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACtD,IAAG,KAAK,IAAI,IAAI,EAAE;oBACd,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,wBAAwB,EAAC,CAAC,CAAA;iBAC9D;qBAAM;oBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;wBACzB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;qBAC1B,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,wBAAwB,EAAE,UAAC,IAAI;gBACrC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzB,IAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,sCAA0B,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBACxE,IAAM,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACvE,IAAG,KAAK,IAAI,IAAI,EAAE;oBACd,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,4BAA4B,EAAC,CAAC,CAAC;iBACnE;qBAAM;oBACH,KAAI,CAAC,EAAE,CAAC,IAAE,CAAA,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,0BAA0B,EAAE;wBACrD,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;qBAC1B,CAAC,CAAC;iBACN;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,UAAC,IAAS;gBAC9B,IAAM,KAAK,GAAG,KAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjF,IAAG,KAAK,IAAI,IAAI,EAAE;oBACd,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAC,KAAK,EAAE,+CAA+C,EAAC,CAAC,CAAA;oBACxF,OAAO;iBACV;gBACD,KAAI,CAAC,EAAE,CAAC,IAAE,CAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;iBAC1B,CAAC,CAAC;gBACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;oBACxB,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE;oBACvB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK;iBAC9C,CAAC,CAAA;YACN,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE;gBACpB,KAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,KAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACP,CAAC;IAOM,2BAAI,GAAX,UAAY,IAAY,EAAE,IAAoC;QAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAQM,kCAAW,GAAlB,UAAmB,KAAa,EAAE,IAAY,EAAE,IAAS;QACrD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,kCAAW,GAAlB,UAAmB,QAAgB,EAAE,IAAY,EAAE,OAAY;QAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,MAAA,EAAE,OAAO,SAAA,EAAE,CAAC,CAAC;IAC3C,CAAC;IAQO,8BAAO,GAAf,UAAgB,GAAyB,EAAE,GAAwB;QAC/D,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,0BAA0B,EAC9C,UAAC,GAAQ,EAAE,IAAS;YAChB,IAAI,GAAG,EAAE;gBACL,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,OAAO,GAAG,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;aAC9C;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACX,CAAC;IACL,mBAAC;AAAD,CAAC,AAtHD,IAsHC"} \ No newline at end of file +{"version":3,"file":"SocketServer.js","sourceRoot":"","sources":["../../src/server/SocketServer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/tournament/Tournament.d.ts b/dist/tournament/Tournament.d.ts index 6da98d8..bbc654f 100644 --- a/dist/tournament/Tournament.d.ts +++ b/dist/tournament/Tournament.d.ts @@ -23,7 +23,7 @@ export declare class Tournament { started: boolean; finished: boolean; matches: { - stats: import("../../../../../../../Users/alex/proyects/socialgorithm/ultimate-ttt-server/src/tournament/model/State").default; + stats: import("../../../../../../../../Users/Tom/Dropbox/Development/socialgorithm/server/src/tournament/model/State").default; players: { token: string; }[]; diff --git a/dist/tournament/model/Lobby.d.ts b/dist/tournament/model/Lobby.d.ts index b7629b9..1053791 100644 --- a/dist/tournament/model/Lobby.d.ts +++ b/dist/tournament/model/Lobby.d.ts @@ -5,6 +5,7 @@ export declare class Lobby { token: string; players: Array; tournament: Tournament; + bannedPlayers: Array; constructor(admin: Player); toObject(): { token: string; @@ -12,11 +13,11 @@ export declare class Lobby { token: string; }[]; tournament: { - options: import("../../../../../../../../Users/alex/proyects/socialgorithm/ultimate-ttt-server/src/tournament/Tournament").TournamentOptions; + options: import("../../../../../../../../../Users/Tom/Dropbox/Development/socialgorithm/server/src/tournament/Tournament").TournamentOptions; started: boolean; finished: boolean; matches: { - stats: import("../../../../../../../../Users/alex/proyects/socialgorithm/ultimate-ttt-server/src/tournament/model/State").default; + stats: import("../../../../../../../../../Users/Tom/Dropbox/Development/socialgorithm/server/src/tournament/model/State").default; players: { token: string; }[]; diff --git a/dist/tournament/model/Lobby.js b/dist/tournament/model/Lobby.js index 75e2419..f0cc0af 100644 --- a/dist/tournament/model/Lobby.js +++ b/dist/tournament/model/Lobby.js @@ -5,6 +5,7 @@ var Lobby = (function () { function Lobby(admin) { this.admin = admin; this.players = []; + this.bannedPlayers = []; this.token = randomWord() + "-" + randomWord(); } Lobby.prototype.toObject = function () { diff --git a/dist/tournament/model/Lobby.js.map b/dist/tournament/model/Lobby.js.map index 7945e6e..57c3670 100644 --- a/dist/tournament/model/Lobby.js.map +++ b/dist/tournament/model/Lobby.js.map @@ -1 +1 @@ -{"version":3,"file":"Lobby.js","sourceRoot":"","sources":["../../../src/tournament/model/Lobby.ts"],"names":[],"mappings":";;AAAA,wCAAyC;AAKzC;IAMI,eAAY,KAAa;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,GAAM,UAAU,EAAE,SAAI,UAAU,EAAI,CAAC;IACnD,CAAC;IAED,wBAAQ,GAAR;QACI,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,CAAC;gBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB,CAAC,EAFkC,CAElC,CAAC;YACH,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;SAClE,CAAC;IACN,CAAC;IACL,YAAC;AAAD,CAAC,AArBD,IAqBC;AArBY,sBAAK"} \ No newline at end of file +{"version":3,"file":"Lobby.js","sourceRoot":"","sources":["../../../src/tournament/model/Lobby.ts"],"names":[],"mappings":";;AAAA,wCAAyC;AAKzC;IAOI,eAAY,KAAa;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAM,UAAU,EAAE,SAAI,UAAU,EAAI,CAAC;IACnD,CAAC;IAED,wBAAQ,GAAR;QACI,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,IAAI,OAAA,CAAC;gBACjC,KAAK,EAAE,MAAM,CAAC,KAAK;aACtB,CAAC,EAFkC,CAElC,CAAC;YACH,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;SAClE,CAAC;IACN,CAAC;IACL,YAAC;AAAD,CAAC,AAvBD,IAuBC;AAvBY,sBAAK"} \ No newline at end of file diff --git a/src/server/Server.ts b/src/server/Server.ts index 1cf0c38..f9ffa77 100644 --- a/src/server/Server.ts +++ b/src/server/Server.ts @@ -38,8 +38,10 @@ export default class Server { this.lobbies = []; this.socketServer = new SocketServer(this.options.port, { - onPlayerConnect: this.onPlayerConnect.bind(this), + onPlayerConnect: this.onPlayerConnect.bind(this), onPlayerDisconnect: this.onPlayerDisconnect.bind(this), + onLobbyKick: this.onLobbyKick.bind(this), + onLobbyBan: this.onLobbyBan.bind(this), onLobbyCreate: this.onLobbyCreate.bind(this), onLobbyJoin: this.onLobbyJoin.bind(this), onLobbyTournamentStart: this.onLobbyTournamentStart.bind(this), @@ -84,7 +86,36 @@ export default class Server { }, }); }); - } + }; + + private onLobbyKick = (lobbyToken: string, playerToken: string): Lobby => { + this.log('Player ' + playerToken + ' is being kicked from ' + lobbyToken); + const foundLobby = this.lobbies.find(l => l.token === lobbyToken); + if(foundLobby == null) { + this.log('Lobby not found (' + lobbyToken + ')'); + return null; + } + + const playerIndex = foundLobby.players.findIndex(p => p.token === playerToken); + foundLobby.players.splice(playerIndex, 1); + + return foundLobby; + }; + + private onLobbyBan = (lobbyToken: string, playerToken: string): Lobby => { + this.log('Player ' + playerToken + ' is being banned from ' + lobbyToken); + const foundLobby = this.lobbies.find(l => l.token === lobbyToken); + if(foundLobby == null) { + this.log('Lobby not found (' + lobbyToken + ')'); + return null; + } + + const playerIndex = foundLobby.players.findIndex(p => p.token === playerToken); + foundLobby.players.splice(playerIndex, 1); + foundLobby.bannedPlayers.push(playerToken); + + return foundLobby; + }; private onLobbyCreate = (creator: Player): Lobby => { const lobby = new Lobby(creator) @@ -101,6 +132,10 @@ export default class Server { return null; } + if (foundLobby.bannedPlayers.find(p => p === player.token)) { + return null; + } + // If the user is spectating, we wont add it to the players list (e.g. web client) if(!spectating && foundLobby.players.find(p => p.token === player.token) == null) { foundLobby.players.push(player) @@ -108,17 +143,18 @@ export default class Server { } return foundLobby; - } + }; - private onLobbyTournamentStart(lobbyToken: string, tournamentOptions: TournamentOptions): Lobby { - const foundLobby = this.lobbies.find(l => l.token === lobbyToken) + private onLobbyTournamentStart(lobbyToken: string, tournamentOptions: TournamentOptions, players: Array): Lobby { + const foundLobby = this.lobbies.find(l => l.token === lobbyToken); if(foundLobby == null) { return null; } if(foundLobby.tournament == null || foundLobby.tournament.isFinished()) { this.log(`Starting tournament in lobby ${foundLobby.token}!`); - foundLobby.tournament = new Tournament(tournamentOptions, this.socketServer, foundLobby.players, foundLobby.token); + const playersToPlay = foundLobby.players.filter(p => players.includes(p.token)); + foundLobby.tournament = new Tournament(tournamentOptions, this.socketServer, playersToPlay, foundLobby.token); foundLobby.tournament.start(); } diff --git a/src/server/SocketServer.ts b/src/server/SocketServer.ts index 3ef7fe1..717e908 100644 --- a/src/server/SocketServer.ts +++ b/src/server/SocketServer.ts @@ -13,9 +13,11 @@ import { DEFAULT_TOURNAMENT_OPTIONS } from './constants'; export interface SocketEvents { onPlayerConnect(player: Player): void; onPlayerDisconnect(player: Player): void; + onLobbyKick(lobbyToken: string, playerToken: string): Lobby; + onLobbyBan(lobbyToken: string, playerToken: string): Lobby; onLobbyCreate(player: Player): Lobby; onLobbyJoin(player: Player, lobbyToken: string, spectating: boolean): Lobby; - onLobbyTournamentStart(lobbyToken: string, options: TournamentOptions): Lobby; + onLobbyTournamentStart(lobbyToken: string, options: TournamentOptions, players: Array): Lobby; updateStats(): void; } @@ -70,7 +72,8 @@ export default class SocketServer { socket.on('lobby tournament start', (data) => { const token = data.token; const options = Object.assign(DEFAULT_TOURNAMENT_OPTIONS, data.options); - const lobby = this.socketEvents.onLobbyTournamentStart(token, options); + const players: Array = data.players; + const lobby = this.socketEvents.onLobbyTournamentStart(token, options, players); if(lobby == null) { socket.emit('exception', {error: 'Unable to start tournament'}); } else { @@ -83,7 +86,7 @@ export default class SocketServer { socket.on('lobby join', (data: any) => { const lobby = this.socketEvents.onLobbyJoin(player, data.token, data.spectating); if(lobby == null) { - socket.emit('lobby exception', {error: 'Unable to join lobby, ensure token is correct'}) + socket.emit('lobby exception', {error: 'Unable to join lobby, ensure token is correct'}); return; } this.io.in(data.token).emit('connected', { @@ -96,6 +99,32 @@ export default class SocketServer { }) }); + socket.on('lobby player kick', (data: any) => { + const {lobbyToken, playerToken} = data; + const lobby = this.socketEvents.onLobbyKick(lobbyToken, playerToken); + if(lobby == null) { + socket.emit('exception', {error: 'Unable to kick player'}); + } else { + this.io.in(lobby.token).emit('lobby player kicked', { + lobby: lobby.toObject(), + }); + this.io.in(playerToken).emit('kicked'); + } + }); + + socket.on('lobby player ban', (data: any) => { + const {lobbyToken, playerToken} = data; + const lobby = this.socketEvents.onLobbyBan(lobbyToken, playerToken); + if(lobby == null) { + socket.emit('exception', {error: 'Unable to ban player'}); + } else { + this.io.in(lobby.token).emit('lobby player banned', { + lobby: lobby.toObject(), + }); + this.io.in(playerToken).emit('banned'); + } + }); + socket.on('disconnect', () => { this.socketEvents.onPlayerDisconnect(player); }); diff --git a/src/tournament/model/Lobby.ts b/src/tournament/model/Lobby.ts index caf72e6..b7fc2b2 100644 --- a/src/tournament/model/Lobby.ts +++ b/src/tournament/model/Lobby.ts @@ -8,10 +8,12 @@ export class Lobby { public token: string; public players: Array; public tournament: Tournament; + bannedPlayers: Array; constructor(admin: Player) { this.admin = admin; this.players = []; + this.bannedPlayers = []; this.token = `${randomWord()}-${randomWord()}`; }