Client: encapsulate WebSocket client in Client class

This commit is contained in:
Lexi / Zoe 2019-01-20 01:16:49 +01:00
parent fd6a40cb0d
commit 3993ae9c44
Signed by: binaryDiv
GPG Key ID: F8D4956E224DA232
1 changed files with 75 additions and 78 deletions

View File

@ -1,90 +1,87 @@
// Constants and variables
// const wsUri = "ws://localhost:32715";
const wsUri = "wss://chat.glitch-in.space:443/ws/";
let websocket;
class Client {
constructor(wsUri) {
this.wsUri = wsUri;
// Initialization
function init() {
console.log("Init...");
openWebSocket();
}
// Open WebSocket
function openWebSocket() {
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onclose = function(evt) { onClose(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
}
// WebSocket event handlers
function onOpen(evt) {
console.log("Connected to " + wsUri + ".");
// Send init command containing chat ID and nickname
sendInit();
}
function onClose(evt) {
console.log("Connection closed (code " + evt.code + ").");
}
function onMessage(evt) {
console.log("Received: " + evt.data);
parseMessage(evt.data);
}
function onError(evt) {
console.error("Connection error: ", evt);
}
// Command senders
function 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);
websocket.send(initJson);
}
// Message parsing
function parseMessage(msgString) {
try {
let msg = JSON.parse(msgString);
switch (msg.type) {
// Response to "init" command
case "init":
// TODO
console.log("Got init response: ", msg);
break;
// Incoming chat message
case "message":
// TODO
console.log("Got message event: from '" + msg.from + "', text '" + msg.text + "'");
break;
// TODO Topic change, user join/leave, error, ...
default:
console.error("Unknown message type '" + msg.type + "'");
}
// Create WebSocket and set 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);
}
catch (e) {
console.error("Error parsing message JSON: " + e.message);
// WebSocket event handlers
onOpen(evt) {
console.log("Connected to " + wsUri);
// Send init command containing chat ID and nickname
this.sendInit();
}
onClose(evt) {
console.log("Connection closed (code " + evt.code + ").");
}
onMessage(evt) {
console.log("Received: " + evt.data);
this.parseMessage(evt.data);
}
onError(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);
}
// Message parsing
parseMessage(msgString) {
try {
let msg = JSON.parse(msgString);
switch (msg.type) {
// Response to "init" command
case "init":
// TODO
console.log("Got init response: ", msg);
break;
// Incoming chat message
case "message":
// TODO
console.log("Got message event: from '" + msg.from + "', text '" + msg.text + "'");
break;
// TODO Topic change, user join/leave, error, ...
default:
console.error("Unknown message type '" + msg.type + "'");
}
}
catch (e) {
console.error("Error parsing message JSON: " + e.message);
}
}
}
// Run script after page is loaded
$(function() {
init();
let client = new Client(wsUri);
});