Generateurv2/frontend/pages/room/[[...mode]].jsx
2022-05-18 10:15:54 +02:00

198 lines
6.0 KiB
JavaScript

import { useRouter } from "next/router";
import Layout from "../../components/Layout.js";
import Join from "../../components/room/Join.jsx";
import Create from "../../components/room/Create.jsx";
import { isBrowser, isEmpty } from "../../utils/utils.js";
import { useQuery } from "react-query";
import { useCallback, useContext, useEffect, useState } from "react";
import { getRoom } from "../../requests/requests.room.js";
import RoomPage from "../../components/room/RoomPage.jsx";
import { getExos, getTags } from "../../requests/requests.exos.js";
import ReconnectingWebSocket from "reconnecting-websocket";
import WaitingRoom from "../../components/room/WaitingRoom.jsx";
import useWebsocketConsumer from "../../hooks/useWebsocketConsumer.jsx";
import useWebsocket from "../../hooks/useWebsocket.jsx";
import {
useWebsocketContext,
WebsocketContext,
WebsocketProvider,
} from "../../context/websocket.context.js";
export default function Room() {
const router = useRouter();
const action = router.query;
//const [ws, setWs] = useState(null);
/* const wsConnect = useCallback((id_code) => {
if (isBrowser) {
if (ws != null) {
ws.close();
setWs(null);
}
setWs(
new ReconnectingWebSocket("ws://192.168.1.18:8000/ws/room/" + id_code)
);
}
}, []);
*/
const [user, setUser] = useState();
/* useEffect(() => {
if (ws != null) {
console.log("TEST");
ws.onmessage = (e) => {
console.log("eeeee", e);
let data = JSON.parse(e.data);
let type = data.type;
if (type == "roomJoined") {
let id_code = data.id_code;
setUser({ clientId: data.clientId, user: data.identity });
sessionStorage.setItem("clientId", data.clientId);
router.push({ pathname: `/room/${id_code}` }, undefined, {
shallow: true,
});
} else if (type == "accept_room") {
let code = data.code;
ws.send(JSON.stringify({ data: { type: "logAcceptedWaiter", code: code } }));
} else if (type == "waitingRoom") {
let nick = data.nick
let id_code = data.id_code
setWaiting(true);
sessionStorage.setItem('waiter', true)
sessionStorage.setItem('waiter_nick', nick)
router.push({pathname: '/room/waiting/' + id_code}, undefined, {shallow: true })
} else if (type == "reloged") {
let id_code = data.id_code;
setUser({ clientId: data.clientId, user: data.identity });
sessionStorage.setItem("clientId", data.clientId);
router.push({ pathname: `/room/${id_code}` }, undefined, {
shallow: true,
});
} else if (type == "reconnectError") {
router.push({ pathname: "/room/join" });
} else if (type == "reconnected") {
setUser({ clientId: data.clientId, user: data.identity });
}
};
}
}, [ws]); */
//useWebsocketConsumer(ws, setUser,user, setData, dataRoom);
/* const { connect, ws, addMessageHandler, removeMessageHandler, reconnect } =
useWebsocket(); */
const {
send,
connect,
addMessageHandler,
removeMessageHandler,
isConnected,
} = useWebsocketContext();
useEffect(() => {
let handler = (e) => {
let data = JSON.parse(e.data);
let type = data.type;
switch (type) {
case "roomJoined": {
let id_code = data.id_code;
setUser({ clientId: data.clientId, user: data.identity });
sessionStorage.setItem("clientId", data.clientId);
router.push({ pathname: `/room/${id_code}` }, undefined, {
shallow: true,
});
break;
}
case "accept_room": {
let code = data.code;
send({
data: { type: "logAcceptedWaiter", code: code },
});
break;
}
case "waitingRoom": {
let nick = data.nick;
let id_code = data.id_code;
sessionStorage.setItem("waiter", true);
sessionStorage.setItem("waiter_nick", nick);
router.push({ pathname: "/room/waiting/" + id_code }, undefined, {
shallow: true,
});
break;
}
case "reloged": {
let id_code = data.id_code;
setUser({ clientId: data.clientId, user: data.identity });
sessionStorage.setItem("clientId", data.clientId);
router.push({ pathname: `/room/${id_code}` }, undefined, {
shallow: true,
});
break;
}
case "reconnected": {
setUser({ clientId: data.clientId, user: data.identity });
break;
}
case "reconnectError": {
router.push({ pathname: "/room/join/" + data.id_code });
break;
}
default:
console.log("default root", e);
}
};
addMessageHandler(handler);
return () => {
removeMessageHandler(handler);
};
});
return (
<>
{!isEmpty(action) && (
<main>
{action.mode[0] == "create" ? (
<Create />
) : action.mode[0] == "join" ? (
<Join
wsConnect={(id_code) => {
connect(`ws://192.168.1.18:8000/ws/room/${id_code}`);
}}
send={send}
/>
) : action.mode[0] == "waiting" ? (
<WaitingRoom
wsConnect={(id_code) => {
connect(`ws://192.168.1.18:8000/ws/room/${id_code}`);
}}
send={send}
/>
) : (
<RoomPage
id_code={action.mode[0]}
user={user}
/>
)}
</main>
)}
</>
);
}
export async function getStaticProps() {
return {
props: {},
revalidate: 60,
};
}
export const getStaticPaths = async () => {
return {
paths: [
/* { params: { mode: "join" } }, { params: { mode: "create" } } */
], //indicates that no page needs be created at build time
fallback: "blocking", //indicates the type of fallback
};
};