Files
@ 7e7874fed2e3
Branch filter:
Location: light9/web/websocket.js - annotation
7e7874fed2e3
1.7 KiB
application/javascript
buttons to add panels to the layout
4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 4556eebe5d73 | /*
url is now relative to the window location. Note that nginx may drop
the connection after 60sec of inactivity.
*/
class ReconnectingWebsocket {
constructor(url, onMessage) {
this.onMessage = onMessage;
this.ws = null;
this.connectTimer = null
this.pong = 0;
this.fullUrl = (
"ws://"
+ window.location.host
+ window.location.pathname
+ (window.location.pathname.match(/\/$/) ? "" : "/")
+ url);
this.connect();
}
setStatus(txt) {
const docStatus = document.querySelector('#status')
if (docStatus) {
docStatus.innerText = txt;
}
}
connect() {
this.reconnect = true;
this.ws = new WebSocket(this.fullUrl);
this.ws.onopen = () => { this.setStatus("connected"); };
this.ws.onerror = (e) => { this.setStatus("error: "+e); };
this.ws.onclose = () => {
this.pong = 1 - this.pong;
this.setStatus("disconnected (retrying "+(this.pong ? "😼":"😺")+")");
this.ws = null;
this.connectTimer = setTimeout(() => {
this.connectTimer = null;
requestAnimationFrame(() => {
if (this.reconnect) {
this.connect();
}
});
}, 2000);
};
this.ws.onmessage = (evt) => {
this.onMessage(JSON.parse(evt.data));
};
}
disconnect() {
this.reconnect = false;
this.ws.close();
}
}
function reconnectingWebSocket(url, onMessage) {
return new ReconnectingWebsocket(url, onMessage);
}
|