diff --git a/src/connection.ts b/src/connection.ts index 2c3153112..2a6dad977 100644 --- a/src/connection.ts +++ b/src/connection.ts @@ -60,7 +60,7 @@ export default class Connection { const ws = new Websock(uri); this._ws = ws; this._id = id; - console.log(new Date() + ": Conntecting to rendezvoous server: " + uri); + console.log(new Date() + ": Conntecting to rendezvoous server: " + uri + ", for " + id); await ws.open(); console.log(new Date() + ": Connected to rendezvoous server"); const connType = rendezvous.ConnType.DEFAULT_CONN; @@ -197,8 +197,8 @@ export default class Connection { const msg = this._ws?.parseMessage(await this._ws?.next()); if (msg?.hash) { this._hash = msg?.hash; + if (!this._password) this.msgbox("input-password", "Password Required", ""); await this.login(this._password); - this.msgbox("input-password", "Password Required", ""); } else if (msg?.testDelay) { const testDelay = msg?.testDelay; if (!testDelay.fromClient) { @@ -266,15 +266,13 @@ export default class Connection { async login(password: string | undefined, _remember: Boolean = false) { this._password = password; - this.msgbox("connecting", "Connecting...", "Logging in..."); - const salt = this._hash?.salt; - if (salt && password) { - let p = hash([password, salt]); + if (password) { + const salt = this._hash?.salt; + let p = hash([password, salt!]); const challenge = this._hash?.challenge; - if (challenge) { - p = hash([p, challenge]); - await this._sendLoginMessage(p); - } + p = hash([p, challenge!]); + this.msgbox("connecting", "Connecting...", "Logging in..."); + await this._sendLoginMessage(p); } else { await this._sendLoginMessage(); } diff --git a/src/globals.js b/src/globals.js index 3562bbdef..d7a229560 100644 --- a/src/globals.js +++ b/src/globals.js @@ -13,6 +13,8 @@ window.getRgba = () => currentFrame; window.getLanguage = () => navigator.language; export function msgbox(type, title, text) { + if (!events) return; + if (!type) return; const text2 = text.toLowerCase(); var hasRetry = type == "error" && title == "Connection Error" @@ -27,6 +29,7 @@ export function msgbox(type, title, text) { } export function pushEvent(name, payload) { + if (!events) return; payload.name = name; events.push(payload); } @@ -56,10 +59,12 @@ export function close() { getConn()?.close(); setConn(undefined); currentFrame = undefined; + events = undefined; } export function newConn() { window.curConn?.close(); + events = []; const conn = new Connection(); setConn(conn); return conn; @@ -120,7 +125,7 @@ export function decrypt(signed, nonce, key) { export function decompress(compressedArray) { const MAX = 1024 * 1024 * 64; const MIN = 1024 * 1024; - let n = 30 * data.length; + let n = 30 * compressedArray.length; if (n > MAX) { n = MAX; } @@ -141,7 +146,7 @@ window.setByName = (name, value) => { switch (name) { case 'connect': newConn(); - startConn(value); + startConn(String(value)); break; case 'login': curConn.login(value.password, value.remember || false); @@ -235,7 +240,7 @@ window.getByName = (name, arg) => { return curConn.getRemember(); break; case 'event': - if (events.length) { + if (events && events.length) { const e = events[0]; events.splice(0, 1); return JSON.stringify(e); diff --git a/src/ui.js b/src/ui.js index f506d0120..4402d7400 100644 --- a/src/ui.js +++ b/src/ui.js @@ -28,6 +28,7 @@ if (app) { `; let player; + window.init(); document.body.onload = () => { const host = document.querySelector('#host'); @@ -55,11 +56,7 @@ if (app) { document.querySelector('div#status').style.display = 'block'; document.querySelector('div#connect').style.display = 'none'; document.querySelector('div#text').innerHTML = 'Connecting ...'; - try { - await conn.start(id.value); - } catch (e) { - msgbox('error', 'Error', e); - } + await conn.start(id.value); }; func(); } diff --git a/src/websock.ts b/src/websock.ts index 1087495a3..6fc66ee17 100644 --- a/src/websock.ts +++ b/src/websock.ts @@ -96,10 +96,12 @@ export default class Websock { resolve(this); }; this._websocket.onclose = (e) => { + if (this._status == 'open') { + reject(e); + } this._status = e; console.error("WebSock.onclose: " + e); this._eventHandlers.close(e); - reject(e); }; this._websocket.onerror = (e) => { if (!this._status) { @@ -141,6 +143,7 @@ export default class Websock { } close() { + this._status = ''; if (this._websocket) { if ( this._websocket.readyState === WebSocket.OPEN ||