Mercurial > code > home > repos > light9
annotate web/websocket.js @ 2440:d1f86109e3cc
more *value getter variants
author | drewp@bigasterisk.com |
---|---|
date | Thu, 30 May 2024 01:08:45 -0700 |
parents | 4556eebe5d73 |
children |
rev | line source |
---|---|
1217
e703b3434dbd
websocket and web cleanup
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
1 /* |
1873
f001d689b3e2
more py3 and typing fixes
Drew Perttula <drewp@bigasterisk.com>
parents:
1217
diff
changeset
|
2 url is now relative to the window location. Note that nginx may drop |
f001d689b3e2
more py3 and typing fixes
Drew Perttula <drewp@bigasterisk.com>
parents:
1217
diff
changeset
|
3 the connection after 60sec of inactivity. |
1217
e703b3434dbd
websocket and web cleanup
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
4 */ |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
5 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
6 class ReconnectingWebsocket { |
1217
e703b3434dbd
websocket and web cleanup
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
7 |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
8 constructor(url, onMessage) { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
9 this.onMessage = onMessage; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
10 this.ws = null; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
11 this.connectTimer = null |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
12 this.pong = 0; |
813 | 13 |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
14 this.fullUrl = ( |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
15 "ws://" |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
16 + window.location.host |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
17 + window.location.pathname |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
18 + (window.location.pathname.match(/\/$/) ? "" : "/") |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
19 + url); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
20 this.connect(); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
21 } |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
22 setStatus(txt) { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
23 const docStatus = document.querySelector('#status') |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
24 if (docStatus) { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
25 docStatus.innerText = txt; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
26 } |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
27 } |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
28 connect() { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
29 this.reconnect = true; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
30 this.ws = new WebSocket(this.fullUrl); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
31 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
32 this.ws.onopen = () => { this.setStatus("connected"); }; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
33 this.ws.onerror = (e) => { this.setStatus("error: "+e); }; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
34 this.ws.onclose = () => { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
35 this.pong = 1 - this.pong; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
36 this.setStatus("disconnected (retrying "+(this.pong ? "😼":"😺")+")"); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
37 this.ws = null; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
38 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
39 this.connectTimer = setTimeout(() => { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
40 this.connectTimer = null; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
41 requestAnimationFrame(() => { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
42 if (this.reconnect) { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
43 this.connect(); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
44 } |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
45 }); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
46 }, 2000); |
813 | 47 }; |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
48 this.ws.onmessage = (evt) => { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
49 this.onMessage(JSON.parse(evt.data)); |
813 | 50 }; |
51 } | |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
52 disconnect() { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
53 this.reconnect = false; |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
54 this.ws.close(); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
55 } |
1217
e703b3434dbd
websocket and web cleanup
Drew Perttula <drewp@bigasterisk.com>
parents:
1212
diff
changeset
|
56 } |
1950
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
57 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
58 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
59 |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
60 function reconnectingWebSocket(url, onMessage) { |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
61 return new ReconnectingWebsocket(url, onMessage); |
19c2e6216cf8
support disconnect() on a reconnectingWebSocket to make it stop connecting
Drew Perttula <drewp@bigasterisk.com>
parents:
1873
diff
changeset
|
62 } |