"use client"; import { Nunito } from "next/font/google"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { useAuth } from "react-oidc-context"; import { getUser } from "muzak/data/fetcher"; import Image from "next/image"; import getSessionId from "muzak/data/session"; import { useSession } from "muzak/contexts/SessionContext"; import Router from "next/router"; const nunito = Nunito({ weight: "900", subsets: ["latin"], }); export default function MobileVoting() { const [vote, setVote] = useState(0.5); const [noHighlight, setNoHighlight] = useState(false); const [yesHighlight, setYesHighlight] = useState(false); const auth = useAuth(); const router = useRouter(); const { sessionId, setSessionId } = useSession(); const [sessionSocket, setSessionSocket] = useState(null); async function waitForOpenSocket() { await new Promise((resolve) => { const interval = setInterval(() => { console.log("Checking socket state..."); if (sessionSocket?.readyState === WebSocket.OPEN) { clearInterval(interval); resolve(); } }, 1000); }); } const user = getUser(); async function connect() { console.log(`ik ben ${user.profile.nickname}`); console.log(sessionSocket); console.log(sessionSocket?.readyState); await waitForOpenSocket(); console.log("socket is open"); sessionSocket.send( JSON.stringify({ action: "login", userr: user.profile.nickname, token: user.access_token, }), ); } // Main message handler and dispatcher function onMessage(e) { console.log(e); let data = JSON.parse(e.data); for (let key in data) { if (key == "track") { setYesHighlight(false); setNoHighlight(false); setVote(0.5); } } console.log(data); //}, 1000); } // Initialize WebSocket connection when sessionId changes useEffect(() => { if (sessionId) { console.log("Socket session ID:", sessionId); const socket = new WebSocket( `${process.env.NEXT_PUBLIC_WS_HOST}/voting/session/${sessionId}/`, ); socket.onmessage = onMessage; setSessionSocket(socket); //setTimeout(() => connect(), 2000); } }, [sessionId]); useEffect(() => { if (sessionSocket) { connect(); } }, [sessionSocket]); async function setSession() { const id = await getSessionId(); setSessionId(id); console.log("Session ID:", id); } useEffect(() => { if (!auth.isLoading && !auth.error && auth.isAuthenticated) { setSession(); } else if (!auth.isLoading && !auth.isAuthenticated) { router.push("/"); } }, [auth]); useEffect(() => { if (vote != 0.5 && sessionSocket?.readyState == WebSocket.OPEN) { sessionSocket.send( JSON.stringify({ action: "vote", token: user.access_token, points: vote, }), ); } }, [vote]); return (
); }