Skip to content

Commit 5d49698

Browse files
committed
fix: setup webocket instance as an array
- to handle mulitple clients
1 parent 38b6fe5 commit 5d49698

File tree

2 files changed

+53
-42
lines changed

2 files changed

+53
-42
lines changed

GUI/ETVR/src/store/api/websocket.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { createMemo } from 'solid-js'
22
import { createStore, produce } from 'solid-js/store'
33
import { RTCMessageType, RTCState } from '@utils/enums'
4-
import { sendToRTCServer } from '@utils/hooks/websocket'
54

65
const PORT = 7856
76

@@ -48,7 +47,7 @@ export const setRTCMessageType = (messageType: RTCMessageType) => {
4847
export const setRTCWebSocket = (ws: WebSocket) => {
4948
setState(
5049
produce((s) => {
51-
s.ws = ws
50+
s.ws.push(ws)
5251
}),
5352
)
5453
}

GUI/ETVR/src/utils/hooks/websocket/index.ts

+52-40
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,20 @@ const sendToRTCServer = (msg: IWebRTCMessage) => {
1111
console.error('[sendToRTCServer]: Message is null or undefined')
1212
return
1313
}
14-
rtcWebSocket().send(JSON.stringify(msg))
14+
rtcWebSocket().forEach((element) => {
15+
element.send(JSON.stringify(msg))
16+
})
1517
}
1618

1719
export const check = () => {
1820
const ws = rtcWebSocket()
19-
if (!ws || ws.readyState == WebSocket.CLOSED) {
20-
//check if websocket instance is closed, if so call `init` function.
21-
setRTCStatus(RTCState.DISCONNECTED)
22-
initWebSocket()
23-
}
21+
ws.forEach((element) => {
22+
if (!element || element.readyState == WebSocket.CLOSED) {
23+
//check if websocket instance is closed, if so call `init` function.
24+
setRTCStatus(RTCState.DISCONNECTED)
25+
initWebSocket()
26+
}
27+
})
2428
}
2529

2630
/********************************* connect *************************************/
@@ -31,44 +35,52 @@ export const check = () => {
3135
*/
3236
const initWebSocket = () => {
3337
setRTCStatus(RTCState.CONNECTING)
34-
rtcWebSocket().onopen = () => {
35-
setRTCTimeout(250) // reset timer to 250 on open of websocket connection
36-
clearTimeout(rtcConnectInterval()) // clear Interval on open of websocket connection
38+
rtcWebSocket().forEach((element) => {
39+
element.onopen = () => {
40+
setRTCTimeout(250) // reset timer to 250 on open of websocket connection
41+
clearTimeout(rtcConnectInterval()) // clear Interval on open of websocket connection
3742

38-
setRTCStatus(RTCState.CONNECTED)
39-
setInterval(() => {
40-
sendToRTCServer({
41-
msg: {
42-
msg_type: 'heartbeat',
43-
receiver: '',
44-
sender: '',
45-
msg: '',
46-
},
47-
})
48-
}, 1000 * 10)
43+
setRTCStatus(RTCState.CONNECTED)
44+
setInterval(() => {
45+
sendToRTCServer({
46+
msg: {
47+
msg_type: 'heartbeat',
48+
receiver: '',
49+
sender: '',
50+
msg: '',
51+
},
52+
})
53+
}, 1000 * 10)
4954

50-
console.log('[WebSocket Client]: Connection Opened')
51-
}
55+
console.log('[WebSocket Client]: Connection Opened')
56+
}
57+
})
5258
//* TODO: Add notification to the user
53-
rtcWebSocket().onerror = (e) => {
54-
setRTCStatus(RTCState.ERROR)
55-
console.error('[WebSocket Client]: Socket encountered error: ', e, 'Closing socket')
56-
rtcWebSocket().close()
57-
}
59+
rtcWebSocket().forEach((element) => {
60+
element.onerror = (e) => {
61+
setRTCStatus(RTCState.ERROR)
62+
console.error('[WebSocket Client]: Socket encountered error: ', e, 'Closing socket')
63+
rtcWebSocket().forEach((element) => {
64+
element.close()
65+
})
66+
}
67+
})
5868
//* TODO: Add notification to the user
59-
rtcWebSocket().onclose = (e) => {
60-
console.log(
61-
`[WebSocket Client]: Socket is closed. Reconnect will be attempted in ${Math.min(
62-
10000 / 1000,
63-
((rtcTimeout() as number) + (rtcTimeout() as number)) / 1000,
64-
)} second.`,
65-
e.reason,
66-
)
67-
//increment retry interval
68-
setRTCTimeout((rtcTimeout() as number) + (rtcTimeout() as number))
69-
//call check function after timeout
70-
setConnectInterval(setTimeout(check, Math.min(10000, rtcTimeout() as number)))
71-
}
69+
rtcWebSocket().forEach((element) => {
70+
element.onclose = (e) => {
71+
console.log(
72+
`[WebSocket Client]: Socket is closed. Reconnect will be attempted in ${Math.min(
73+
10000 / 1000,
74+
((rtcTimeout() as number) + (rtcTimeout() as number)) / 1000,
75+
)} second.`,
76+
e.reason,
77+
)
78+
//increment retry interval
79+
setRTCTimeout((rtcTimeout() as number) + (rtcTimeout() as number))
80+
//call check function after timeout
81+
setConnectInterval(setTimeout(check, Math.min(10000, rtcTimeout() as number)))
82+
}
83+
})
7284
}
7385

7486
export { sendToRTCServer, initWebSocket }

0 commit comments

Comments
 (0)