2023-04-10 23:28:28 +02:00
|
|
|
import { useCallback, useState } from 'react'
|
|
|
|
import { WEBSOCKET_URL } from '../background/constants'
|
|
|
|
import { UserInfo } from '../components/jitsi/types'
|
2023-02-07 20:31:07 +01:00
|
|
|
|
|
|
|
const createWebSocketConnection = (userInfo: UserInfo) => {
|
2023-04-10 23:28:28 +02:00
|
|
|
const webSocket = new WebSocket(WEBSOCKET_URL)
|
|
|
|
console.log('[Rooms] createWebSocketConnection')
|
|
|
|
webSocket.addEventListener('open', (_: Event) => webSocket.send(JSON.stringify(userInfo)))
|
2023-02-07 20:31:07 +01:00
|
|
|
|
2023-04-10 23:28:28 +02:00
|
|
|
return webSocket
|
|
|
|
}
|
2023-02-07 20:31:07 +01:00
|
|
|
|
|
|
|
function useWebSocketConnection(userInfo: UserInfo) {
|
2023-04-10 23:28:28 +02:00
|
|
|
console.log('[Rooms] useWebSocketConnection')
|
2023-02-07 20:31:07 +01:00
|
|
|
|
2023-04-10 23:28:28 +02:00
|
|
|
const [webSocketConnection] = useState<WebSocket>(() => createWebSocketConnection(userInfo))
|
2023-02-07 20:31:07 +01:00
|
|
|
|
|
|
|
const sendMessage = useCallback(
|
|
|
|
(message: string) => {
|
|
|
|
//if the socket's open, send a message:
|
|
|
|
if (webSocketConnection.readyState === WebSocket.OPEN) {
|
2023-04-10 23:28:28 +02:00
|
|
|
console.log('[Rooms] sending to ws', message)
|
|
|
|
webSocketConnection.send(message)
|
2023-02-07 20:31:07 +01:00
|
|
|
}
|
|
|
|
},
|
2023-01-21 11:18:41 +01:00
|
|
|
[webSocketConnection]
|
2023-04-10 23:28:28 +02:00
|
|
|
)
|
2023-01-21 11:18:41 +01:00
|
|
|
|
|
|
|
const onMessage = useCallback(
|
|
|
|
(messageHandler: (messageHandler: string) => void) => {
|
2023-02-07 20:31:07 +01:00
|
|
|
const wsMessageHandler = (ev: MessageEvent<any>) => {
|
2023-04-10 23:28:28 +02:00
|
|
|
messageHandler(ev.data)
|
|
|
|
}
|
|
|
|
webSocketConnection.addEventListener('message', wsMessageHandler)
|
2023-01-21 11:18:41 +01:00
|
|
|
},
|
|
|
|
[webSocketConnection]
|
2023-04-10 23:28:28 +02:00
|
|
|
)
|
2023-01-21 11:18:41 +01:00
|
|
|
|
2023-04-10 23:28:28 +02:00
|
|
|
const disconnect = useCallback(webSocketConnection.close, [webSocketConnection])
|
2023-04-01 17:46:33 +02:00
|
|
|
|
2023-04-10 23:28:28 +02:00
|
|
|
return { onMessage, sendMessage, disconnect }
|
2023-01-21 11:18:41 +01:00
|
|
|
}
|
|
|
|
|
2023-04-10 23:28:28 +02:00
|
|
|
export default useWebSocketConnection
|