summaryrefslogtreecommitdiff
path: root/WebInterface/NodeJSServer/src/modules/server-client.js
diff options
context:
space:
mode:
Diffstat (limited to 'WebInterface/NodeJSServer/src/modules/server-client.js')
-rw-r--r--WebInterface/NodeJSServer/src/modules/server-client.js82
1 files changed, 56 insertions, 26 deletions
diff --git a/WebInterface/NodeJSServer/src/modules/server-client.js b/WebInterface/NodeJSServer/src/modules/server-client.js
index 0a257ba..ea37e1e 100644
--- a/WebInterface/NodeJSServer/src/modules/server-client.js
+++ b/WebInterface/NodeJSServer/src/modules/server-client.js
@@ -1,10 +1,20 @@
import * as signalR from '@aspnet/signalr';
import ServerListing from './ui/server-listing.js';
+/**
+ * Class for communication to server
+ */
export default class ServerClient {
+ /**
+ * Creates new connection
+ * @param {string} url URL of server running signalR
+ * @param {string} serverListingId HTML ID of server-listing element,
+ * to populate with available games
+ * @param {boolean} [debug=false] Enable debug output?
+ */
constructor(url, serverListingId, debug = false) {
const connectionBuilder = new signalR.HubConnectionBuilder()
- .withUrl(url)
+ .withUrl(url);
if (debug) {
connectionBuilder.configureLogging(signalR.LogLevel.Debug);
@@ -14,20 +24,25 @@ export default class ServerClient {
this.connection = connectionBuilder.build();
this.connection.start()
- .then(() => this.loadServers())
- .catch(() => err => console.error(err.toString()));
+ .then(() => this.loadServers()) // Load games list, once connected
+ .catch((err) => console.error(err.toString()));
+ // Initialize refreshing (blocks new refreshes if true)
this.refreshing = false;
this.serverListing = new ServerListing(serverListingId);
- this.messageHandling(); //TODO: REMOVE, JUST FOR DEBUGGING
+ this.messageHandling();
}
+ /**
+ * Requests list of avalable games on the server
+ */
loadServers() {
- if (this.refreshing) return;
+ if (this.refreshing) return; // If already refreshing, no new request
+
this.connection.on('ListGroups', (groups) => {
- console.log(groups)
+ // Populate server listing
this.serverListing.flushElements();
this.serverListing.addElements(groups);
this.connection.off('ListGroups');
@@ -36,39 +51,54 @@ export default class ServerClient {
});
this.connection.invoke('GetGroups')
- .catch(err => {
+ .catch((err) => {
this.refreshing = false;
- console.error(err.toString())
+ console.error(err.toString());
});
this.refreshing = true;
}
- createServer(){
+ /**
+ * Sends a game creating request to the server
+ * @param {string} name Name of the new game
+ * @param {string} password Password
+ */
+ createServer(name, password) {
// TODO: Create
}
- sendLogin(group, password, username){
+ /**
+ * Sends a login request
+ * @param {string} group Group name to join
+ * @param {string} password Password to send as SHA-256 Base64 String
+ * @param {string} username Display name to use
+ * @param {ServerClient~loginCallback} callback Callback function to use
+ */
+ sendLogin(group, password, username, callback) {
+ this.connection.on('LoginResponse', (result) => {
+ callback(result);
+ this.connection.off('LoginResponse');
+ });
this.connection.invoke('Login', group, username, password);
}
- messageHandling(){
+ /**
+ * Registers message handling
+ */
+ messageHandling() {
this.connection.on('ReceiveMessage', (user, message) => {
- let msg = message.replace(/&/g, "&")
- .replace(/</g, "&lt;")
- .replace(/>/g, "&gt;");
- let encodedMsg = user + " sagt: " + msg;
- console.log(encodedMsg); //TODO: REMOVE, JUST FOR DEBUGGING
+ let msg = message.replace(/&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;');
+ let encodedMsg = user + ' sagt: ' + msg;
+ console.log(encodedMsg); // TODO: REMOVE, JUST FOR DEBUGGING
});
}
}
-
-
-// connection.on('ReceiveMessage', (user, message) => {
-// let msg = message.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
-// let encodedMsg = user + " says " + msg;
-// let li = document.createElement("div");
-// li.classList.add('server');
-// li.textContent = encodedMsg;
-// document.getElementById('server-list').appendChild(li);
-// });
+/**
+ * Callback to call with response to login request
+ * @callback ServerClient~loginCallback
+ * @param {number} result 0: Success, 1: PasswordError, 2:UsernameTaken
+ * , 3:Unknown Error
+ */