237 lines
7.1 KiB
React
237 lines
7.1 KiB
React
|
import { useRouter } from "next/router";
|
||
|
import { useEffect } from "react";
|
||
|
|
||
|
export default function useWebsocketConsumer(
|
||
|
ws,
|
||
|
setUser,
|
||
|
user,
|
||
|
setData,
|
||
|
dataRoom
|
||
|
) {
|
||
|
const router = useRouter();
|
||
|
console.log("New instance of", setData, dataRoom);
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (ws != null) {
|
||
|
ws.onmessage = (e) => {
|
||
|
console.log("eeeee", 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;
|
||
|
ws.send(
|
||
|
JSON.stringify({
|
||
|
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 "reconnectError": {
|
||
|
router.push({ pathname: "/room/join" });
|
||
|
break;
|
||
|
}
|
||
|
case "reconnected": {
|
||
|
setUser({ clientId: data.clientId, user: data.identity });
|
||
|
break;
|
||
|
}
|
||
|
case "joined": {
|
||
|
if (dataRoom) {
|
||
|
let nick = data.nick;
|
||
|
let owner = data.owner;
|
||
|
let online = data.online;
|
||
|
let code = data.code;
|
||
|
|
||
|
let oldParticipants = dataRoom.room.participants;
|
||
|
let oldWaiters = dataRoom.room.waiters;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
participants: [
|
||
|
...oldParticipants,
|
||
|
{ nick: nick, owner: owner, online: online, code: code },
|
||
|
],
|
||
|
waiters: [...oldWaiters.filter((w) => w.code != code)],
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case "disconnect_participant": {
|
||
|
if (dataRoom) {
|
||
|
let oldParticipants = dataRoom.room.participants;
|
||
|
let nick = data.nick;
|
||
|
console.log(oldParticipants, nick);
|
||
|
let participant = oldParticipants.filter(
|
||
|
(p) => p.nick == nick
|
||
|
)[0];
|
||
|
console.log("part", participant);
|
||
|
participant.online = false;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
participants: [
|
||
|
...oldParticipants.filter((p) => p.nick != nick),
|
||
|
participant,
|
||
|
],
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case "reconnect_participant": {
|
||
|
if (dataRoom) {
|
||
|
let oldParticipants = dataRoom.room.participants;
|
||
|
let nick = data.nick;
|
||
|
console.log(oldParticipants, nick);
|
||
|
let participant = oldParticipants.filter(
|
||
|
(p) => p.nick == nick
|
||
|
)[0];
|
||
|
console.log("part", participant);
|
||
|
participant.online = true;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
participants: [
|
||
|
...oldParticipants.filter((p) => p.nick != nick),
|
||
|
participant,
|
||
|
],
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case "add_waiter": {
|
||
|
console.log("Herre new waiteeerr ", setData, dataRoom);
|
||
|
if (dataRoom) {
|
||
|
let nick = data.nick;
|
||
|
let code = data.code;
|
||
|
let chanName = data.chanName;
|
||
|
|
||
|
let oldWaiters = dataRoom.room.waiters;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
waiters: [
|
||
|
...oldWaiters,
|
||
|
{ nick: nick, code: code, chanName: chanName },
|
||
|
],
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case "del_waiter": {
|
||
|
if (dataRoom) {
|
||
|
let code = data.code;
|
||
|
|
||
|
let oldWaiters = dataRoom.room.waiters;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
waiters: [...oldWaiters.filter((w) => w.code != code)],
|
||
|
},
|
||
|
});
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case "banned": {
|
||
|
if (dataRoom) {
|
||
|
let nick = data.nick;
|
||
|
let code = data.code;
|
||
|
|
||
|
if (user.user.code != code) {
|
||
|
let oldParticipants = dataRoom.room.participants;
|
||
|
let oldParcours = dataRoom.room.parcours;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
participants: [
|
||
|
...oldParticipants.filter((p) => p.nick != nick),
|
||
|
],
|
||
|
parcours: [
|
||
|
...oldParcours.map((p) => {
|
||
|
return {
|
||
|
...p,
|
||
|
challenger: [...p.challenger((c) => c.nick != nick)],
|
||
|
};
|
||
|
}),
|
||
|
],
|
||
|
},
|
||
|
});
|
||
|
} else if (user.user.code == code) {
|
||
|
router.push({ pathname: "/room/join" });
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case "add_parcours": {
|
||
|
if (dataRoom) {
|
||
|
let new_parcours = data.parcours;
|
||
|
let id_code = dataRoom.room.id_code;
|
||
|
let oldParcours = dataRoom.room.parcours;
|
||
|
setData({
|
||
|
room: {
|
||
|
...dataRoom.room,
|
||
|
parcours: [...oldParcours, new_parcours],
|
||
|
},
|
||
|
});
|
||
|
router.push(
|
||
|
{
|
||
|
pathname: `/room/${id_code}`,
|
||
|
query: { action: "view" },
|
||
|
},
|
||
|
undefined,
|
||
|
{
|
||
|
shallow: true,
|
||
|
}
|
||
|
);
|
||
|
}
|
||
|
break
|
||
|
}
|
||
|
|
||
|
case "challenge_parcours":
|
||
|
{
|
||
|
if (dataRoom) {
|
||
|
return
|
||
|
}
|
||
|
break
|
||
|
}
|
||
|
default:
|
||
|
console.log("Default", type);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
}, [ws, dataRoom]);
|
||
|
}
|