diff options
Diffstat (limited to 'WebInterface/NodeJSServer/src/modules/server-client.js')
-rw-r--r-- | WebInterface/NodeJSServer/src/modules/server-client.js | 82 |
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, "<") - .replace(/>/g, ">"); - let encodedMsg = user + " sagt: " + msg; - console.log(encodedMsg); //TODO: REMOVE, JUST FOR DEBUGGING + let msg = message.replace(/&/g, '&') + .replace(/</g, '<') + .replace(/>/g, '>'); + let encodedMsg = user + ' sagt: ' + msg; + console.log(encodedMsg); // TODO: REMOVE, JUST FOR DEBUGGING }); } } - - -// connection.on('ReceiveMessage', (user, message) => { -// let msg = message.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); -// 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 + */ |