jitsi-roomsv2/frontend/src/hooks/useWebSocketConnection.ts

45 lines
1.4 KiB
TypeScript
Raw Normal View History

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
}
},
[webSocketConnection]
2023-04-10 23:28:28 +02: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)
},
[webSocketConnection]
2023-04-10 23:28:28 +02: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-04-10 23:28:28 +02:00
export default useWebSocketConnection