diff options
Diffstat (limited to 'scripts/client.js')
-rw-r--r-- | scripts/client.js | 385 |
1 files changed, 194 insertions, 191 deletions
diff --git a/scripts/client.js b/scripts/client.js index 07e2fce..c612175 100644 --- a/scripts/client.js +++ b/scripts/client.js @@ -2,44 +2,39 @@ const VERSION = "1.0.0"; const DefaultUserOps = { - a: { - type: "color", - title: "Player Color", - args: ["#ff0000"] - }, - b: { - type: "text", - title: "Player Name", - args: ["User " + Math.floor(Math.random() * 10000), ""] - }, - d: { - type: "checkbox", - title: "Order Check (D)", - args: [] - }, - c: { - type: "checkbox", - title: "Order Check (C)", - args: [] - } + color: { + type: "color", + title: "Player Color", + args: ["#ff0000"] + }, + name: { + type: "text", + title: "Player Name", + args: ["User " + Math.floor(Math.random() * 10000), ""] + } } const DefaultGameOps = { - a: { - type: "checkbox", - title: "Unlisted", - args: [] - }, - b: { - type: "checkbox", - title: "Use Password", - args: [] - }, - c: { - type: "text", - title: "Set Password", - args: [Math.floor(Math.random() * 10000), ""] - } + name: { + type:"text", + title: "Room Name", + args: ["", ""] + }, + hidden: { + type: "checkbox", + title: "Unlisted", + args: [] + }, + usePass: { + type: "checkbox", + title: "Use Password", + args: [] + }, + pass: { + type: "text", + title: "Set Password", + args: [Math.floor(Math.random() * 10000), ""] + } } // Client acts as the message hub for the whole game. @@ -47,162 +42,170 @@ const DefaultGameOps = { // Client also performs the handshake for first starting the connection and messages everyone if the connection errors or closes. class Client{ - constructor (serveraddr, game) - { - this.socket = new SockWorker(serveraddr, VERSION); - this.socket.addEventListener("error", this.socketError.bind(this)); - this.socket.addEventListener("closed", this.socketClose.bind(this)); - this.socket.addEventListener("handshake", this.handshake.bind(this)); - this.socket.addEventListener("menu", this.menu.bind(this)); - this.socket.addEventListener("game", this.game.bind(this)); + constructor (serveraddr, game) + { + this.socket = new SockWorker(serveraddr, VERSION); + this.socket.addEventListener("error", this.socketError.bind(this)); + this.socket.addEventListener("closed", this.socketClose.bind(this)); + this.socket.addEventListener("handshake", this.handshake.bind(this)); + this.socket.addEventListener("menu", this.menu.bind(this)); + this.socket.addEventListener("game", this.game.bind(this)); this.socket.addEventListener("chat", this.chat.bind(this)); - this.lobby = new Lobby(document.getElementsByClassName("lobby")[0], this.socket); - - this.drag = new MultiDrag(); - - this.table = new Table(document.getElementsByClassName("table")[0], this.drag, this.socket); - - this.chat = new Chat(document.getElementsByClassName("chat")[0], this.socket); - this.chat.addChannel("Global"); - this.chat.switchChannel("Global"); - - this.settings = new Settings(DefaultUserOps); - this.settings.putSettings(this.lobby.e.settings); - - this.gameOptions = new Settings(DefaultGameOps); - this.gameOptions.putSettings(this.lobby.top.newGame); - - this.game = game; - } - - // Initialize the connection - init () - { - this.socket.init(); - } - - // Callbacks for if the socket fails or closes - - socketError() { - this.lobby.setState("Error", "closed", this.socket.server); - this.table.handleClose(); - } - - socketClose() { - this.lobby.setState("Closed", "closed", this.socket.server); - this.table.handleClose(); - } - - // Callback when negotiating with the server for the first time and we are determining versions - handshake (m) - { - switch (m.type) { - case "verr": - this.socket.close(); - - alert(`Error connecting to server: version of client (${this.version}) not accepted.`); - - console.error(`Error connecting to server: version of client (${this.version}) not accepted.`); - - console.error(m.data); - - return; - - case "ready": - this.settings.cleanup(); - this.gameOptions.cleanup(); - - this.settings = new Settings(m.data.user); - this.gameOptions = new Settings(m.data.game); - - this.gameOptions.putSettings(this.lobby.top.newGame); - - if(this.lobby.top.mobileSettingsOpen()) - this.settings.putSettings(this.lobby.top.mobileSettings); - else - this.settings.putSettings(this.lobby.e.settings); - - this.socket.send("ready", ""); - - return; - } - } - - // Menu switch, called when in the lobby and a message arrives from the server - menu (m) - { - switch (m.type) { - case "plist": - this.lobby.packList(m.data); - break; - case "glist": - this.lobby.gameList(m.data, this.game); - this.game = null; - break; - case "players": - this.lobby.players(m.data); - break; - case "gdel": - this.lobby.removeGame(m.data); - break; - case "gadd": - this.lobby.addGame(m.data); - break; - case "pdel": - this.lobby.removePlayer(m.data); - break; - case "padd": - this.lobby.addPlayer(m.data); - break; - case "pmove": - this.lobby.movePlayer(m.data); - break; - } - } - - // Game switch, called when in game and a message arrives from the server - game (m) - { - switch (m.type) { - case "move": - this.table.moveByID(m.data.card, m.data.deck, m.data.pos); - break; - } - } - - // Callback when a chat event is recieved from the server - chat (m) - { - switch (m.type) { - case "delchan": - this.chat.deleteChannel(m.data); - break; - case "newchan": - this.chat.addChannel(m.data); - break; - - case "message": - this.chat.recieveMessage(m.data.type, m.data.data); - } - } - - // Reset the lobby and table, then attempt to reopen the connection to the server. - reset () - { - this.lobby.reset(); - this.table.reset(); - - this.socket.init(); - } - - joinGame(id) - { - this.table.openTable(); - } - - leaveGame() - { - - } + this.lobby = new Lobby(document.getElementsByClassName("lobby")[0], this.socket); + + this.drag = new MultiDrag(); + + this.table = new Table(document.getElementsByClassName("table")[0], this.drag, this.socket); + + this.chat = new Chat(document.getElementsByClassName("chat")[0], this.socket); + this.chat.addChannel("Global"); + this.chat.switchChannel("Global"); + + this.settings = new Settings(DefaultUserOps); + this.settings.putSettings(this.lobby.e.settings); + + this.gameOptions = new Settings(DefaultGameOps); + this.gameOptions.putSettings(this.lobby.top.newGame); + + this.game = game; + } + + // Initialize the connection + init () + { + this.socket.init(); + } + + // Callbacks for if the socket fails or closes + + socketError() { + alert("Connection error"); + this.lobby.setState("Error", "closed", this.socket.server); + this.table.handleClose(); + } + + socketClose() { + alert("Connection closed by server"); + this.lobby.setState("Closed", "closed", this.socket.server); + this.table.handleClose(); + } + + // Callback when negotiating with the server for the first time and we are determining versions + handshake (e) + { + let m = e.detail; + switch (m.type) { + case "verr": + this.socket.close(); + + alert(`Error connecting to server: version of client (${this.version}) not accepted.`); + + console.error(`Error connecting to server: version of client (${this.version}) not accepted.`); + + console.error(m.data); + + return; + + case "ready": + console.log(`Handshake with server OK. Running client version ${this.version}`); + + this.settings.cleanup(); + this.gameOptions.cleanup(); + + this.settings = new Settings(m.data.user); + this.gameOptions = new Settings(m.data.game); + + this.gameOptions.putSettings(this.lobby.top.newGame); + + if(this.lobby.top.mobileSettingsOpen()) + this.settings.putSettings(this.lobby.top.mobileSettings); + else + this.settings.putSettings(this.lobby.e.settings); + + this.socket.send("ready", ""); + + return; + } + } + + // Menu switch, called when in the lobby and a message arrives from the server + menu (e) + { + let m = e.detail; + switch (m.type) { + case "plist": + this.lobby.packList(m.data); + break; + case "glist": + this.lobby.gameList(m.data, this.game); + this.game = null; + break; + case "players": + this.lobby.players(m.data); + break; + case "gdel": + this.lobby.removeGame(m.data); + break; + case "gadd": + this.lobby.addGame(m.data); + break; + case "pdel": + this.lobby.removePlayer(m.data); + break; + case "padd": + this.lobby.addPlayer(m.data); + break; + case "pmove": + this.lobby.movePlayer(m.data); + break; + } + } + + // Game switch, called when in game and a message arrives from the server + game (e) + { + let m = e.detail; + switch (m.type) { + case "move": + this.table.moveByID(m.data.card, m.data.deck, m.data.pos); + break; + } + } + + // Callback when a chat event is recieved from the server + chat (e) + { + let m = e.detail; + switch (m.type) { + case "delchan": + this.chat.deleteChannel(m.data); + break; + case "newchan": + this.chat.addChannel(m.data); + break; + + case "message": + this.chat.recieveMessage(m.data.type, m.data.data); + } + } + + // Reset the lobby and table, then attempt to reopen the connection to the server. + reset () + { + this.lobby.reset(); + this.table.reset(); + + this.socket.init(); + } + + joinGame(id) + { + this.table.openTable(); + } + + leaveGame() + { + + } } |