2023-01-21 11:18:41 +01:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
},
|
2023-01-21 11:18:41 +01:00
|
|
|
[webSocketConnection]
|
2023-02-07 20:31:07 +01: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>) => {
|
|
|
|
messageHandler(ev.data);
|
|
|
|
};
|
|
|
|
webSocketConnection.addEventListener("message", wsMessageHandler);
|
2023-01-21 11:18:41 +01:00
|
|
|
},
|
|
|
|
[webSocketConnection]
|
2023-02-07 20:31:07 +01:00
|
|
|
);
|
2023-01-21 11:18:41 +01:00
|
|
|
|
2023-04-01 17:46:33 +02:00
|
|
|
const disconnect = useCallback(webSocketConnection.close, [
|
|
|
|
webSocketConnection,
|
|
|
|
]);
|
|
|
|
|
|
|
|
return { onMessage, sendMessage, disconnect };
|
2023-01-21 11:18:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
export default useWebSocketConnection;
|