diff --git a/public_html/js/client.js b/public_html/js/client.js index 974a5bd..8a19005 100644 --- a/public_html/js/client.js +++ b/public_html/js/client.js @@ -4,55 +4,76 @@ class Client { constructor(wsUri) { this.wsUri = wsUri; - // Create WebSocket and set callbacks + // Create WebSocket and set internal callbacks console.log("Initialize Client...") this.webSocket = new WebSocket(wsUri); - this.webSocket.onopen = this.onOpen.bind(this); - this.webSocket.onclose = this.onClose.bind(this); - this.webSocket.onmessage = this.onMessage.bind(this); - this.webSocket.onerror = this.onError.bind(this); + this.webSocket.onopen = this._onSocketOpen.bind(this); + this.webSocket.onclose = this._onSocketClose.bind(this); + this.webSocket.onerror = this._onSocketError.bind(this); + this.webSocket.onmessage = this._onSocketMessage.bind(this); } - // WebSocket event handlers - onOpen(evt) { + // Internal WebSocket event handlers + _onSocketOpen(evt) { console.log("Connected to " + this.wsUri); // Send init command containing chat ID and nickname this.sendInit(); } - onClose(evt) { + _onSocketClose(evt) { console.log("Connection closed (code " + evt.code + ")."); } - onMessage(evt) { - console.log("Received: " + evt.data); - this.parseMessage(evt.data); - } - - onError(evt) { + _onSocketError(evt) { console.error("Connection error: ", evt); } - // Command senders - sendInit() { - // Define command as JSON object - let initObj = { - action: "init", - chat_id: "42", - nickname: "binaryDiv" - }; - - // Send command as JSON string - let initJson = JSON.stringify(initObj); - console.log("Sending init: " + initJson); - this.webSocket.send(initJson); + _onSocketMessage(evt) { + console.log("Received: " + evt.data); + this._parseMessage(evt.data); } - // Message parsing - parseMessage(msgString) { + /** + * Sends an arbitrary command as JSON. + * + * commandObj: The command as an object ('action' specifies type of command). + */ + sendCommand(commandObj) { + const commandJson = JSON.stringify(commandObj); + console.log("Sending command: " + commandJson); + this.webSocket.send(commandJson); + } + + /** + * Sends the 'init' command which sets up the session. Also sets the chat ID and nickname. + */ + sendInit() { + this.sendCommand({ + action: "init", + chat_id: "42", + nickname: "binaryDiv", + }); + } + + /** + * Sends the 'message' command which sends a chat message to the chat. + * + * msgText: The text of the chat message. + */ + sendChatMessage(msgText) { + this.sendCommand({ + action: "message", + text: msgText, + }); + } + + /** + * Parses an incoming JSON message and dispatches specific events. + */ + _parseMessage(msgString) { try { - let msg = JSON.parse(msgString); + const msg = JSON.parse(msgString); switch (msg.type) { // Response to "init" command