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

51 lines
1.4 KiB
TypeScript
Raw Normal View History

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