Showing rooms works

This commit is contained in:
qvalentin 2023-02-07 20:31:07 +01:00
parent b0ebeda23a
commit f93cabb99d
17 changed files with 265 additions and 59 deletions

View file

@ -1,20 +1,26 @@
import { useEffect } from "react";
import { UserInfo } from "../components/jitsi/types";
import useRoomData from "./useRoomData";
import useWebSocketConnection from "./useWebSocketConnection";
function useBackendData() {
function useBackendData(userInfo: UserInfo) {
console.log("[Rooms] useBackendData");
const { onMessage, sendMessage } = useWebSocketConnection(userInfo);
const { onMessage, sendMessage } = useWebSocketConnection();
const { roomData, setRoomData } = useRoomData();
const { roomData, setRoomData } = useRoomData()
onMessage(
(messageString) => {
const messageObject = JSON.parse(messageString)
!!messageObject.roomData && setRoomData(messageObject.roomData)
}
)
useEffect(
() =>
onMessage((messageString) => {
console.log("[Rooms] message from ws", messageString);
const messageObject = JSON.parse(messageString);
!!messageObject.roomsData && setRoomData(messageObject);
}),
[onMessage, setRoomData]
);
return { roomData, sendMessage };
}
export default useBackendData;

View file

@ -0,0 +1,21 @@
import { useState } from "react";
import { ConferenceData } from "../background/jitsi/eventListeners";
import { UserInfo } from "../components/jitsi/types";
function useConferenceData(
sendMessage: (message: string) => void,
setUserInfo: (newData: UserInfo) => void
) {
const [conferenceData, setConferenceDataLocal] = useState<ConferenceData>();
const setConferenceData = (newData: ConferenceData) => {
console.log("[Rooms] set conferenceData");
sendMessage(JSON.stringify(newData));
setConferenceDataLocal(newData);
setUserInfo({ displayName: newData.displayName, email: "" });
};
return { conferenceData, setConferenceData };
}
export default useConferenceData;

View file

@ -0,0 +1,33 @@
import { useState } from "react";
import { USER_COOKIE_NAME } from "../background/constants";
import { getCookie, setCookie } from "../background/cookies";
import { UserInfo } from "../components/jitsi/types";
function useLocalUser() {
const [userInfo, setUserInfoLocal] = useState<UserInfo>(() =>
getUserInfoFromCookie()
);
const setUserInfo = (newData: UserInfo) => {
storeUserInfoInCookie(newData);
setUserInfoLocal(newData);
};
return { userInfo, setUserInfo };
}
function getUserInfoFromCookie(): UserInfo {
let cookie = getCookie(USER_COOKIE_NAME);
console.log("[Rooms] getUserNameFromCookie 1", cookie);
if (cookie) return JSON.parse(cookie);
return {
displayName: "unknown traveller",
email: "",
};
}
function storeUserInfoInCookie(userInfo: UserInfo) {
setCookie(USER_COOKIE_NAME, JSON.stringify(userInfo));
}
export default useLocalUser;

View file

@ -0,0 +1,10 @@
import { useState } from "react";
import { UsersData } from "../background/types/roomData";
function useRoomData() {
const [roomData, setRoomData] = useState<UsersData>();
return { roomData, setRoomData };
}
export default useRoomData;

View file

@ -1,7 +1,7 @@
import { useCallback, useState } from "react";
function useRoomName() {
const [roomName, setRoomName] = useState(getRoomNameFromUrl());
const [roomName, setRoomName] = useState(() => getRoomNameFromUrl());
const updateRoomName = useCallback(
(newName: string) => {
@ -11,13 +11,10 @@ function useRoomName() {
[setRoomName]
);
const submitRoomName = useCallback(
() => {
setRoomNameInUrl(roomName);
setRoomNameInTitle(roomName);
},
[roomName]
);
const submitRoomName = useCallback(() => {
setRoomNameInUrl(roomName);
setRoomNameInTitle(roomName);
}, [roomName]);
return { roomName, updateRoomName, submitRoomName };
}

View file

@ -1,34 +1,46 @@
import { useCallback, useState } from "react";
import { WEBSOCKET_URL } from "../background/constants";
import { UserInfo } from "../components/jitsi/types";
function useWebSocketConnection() {
const createWebSocketConnection = (userInfo: UserInfo) => {
const webSocket = new WebSocket(WEBSOCKET_URL);
console.log("[Rooms] createWebSocketConnection");
webSocket.addEventListener("open", (_: Event) =>
webSocket.send(JSON.stringify(userInfo.displayName))
);
const createWebSocketConnection = () => {
const webSocket = new WebSocket(WEBSOCKET_URL);
return webSocket
}
return webSocket;
};
const [webSocketConnection] = useState<WebSocket>(createWebSocketConnection())
function useWebSocketConnection(userInfo: UserInfo) {
console.log("[Rooms] useWebSocketConnection");
const sendMessage = useCallback((message: string) => {
//if the socket's open, send a message:
if (webSocketConnection.readyState === WebSocket.OPEN) {
webSocketConnection.send(message);
}
},
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]
)
);
const onMessage = useCallback(
(messageHandler: (messageHandler: string) => void) => {
const wsMessageHandler = (ev: MessageEvent<any>) => { messageHandler(ev.data) }
webSocketConnection.addEventListener('message', wsMessageHandler)
const wsMessageHandler = (ev: MessageEvent<any>) => {
messageHandler(ev.data);
};
webSocketConnection.addEventListener("message", wsMessageHandler);
},
[webSocketConnection]
)
);
return { onMessage, sendMessage }
return { onMessage, sendMessage };
}
export default useWebSocketConnection;