"use client" import { FC, useEffect, useState } from "react" import Player from "./player/Player" import { ClientToServerEvents, createClientSocket, ServerToClientEvents, } from "../lib/socket" import Button from "./action/Button" import { Socket } from "socket.io-client" import ConnectingAlert from "./alert/ConnectingAlert" import PlaylistMenu from "./playlist/PlaylistMenu" import IconLoop from "./icon/IconLoop" import InputUrl from "./input/InputUrl" import UserList from "./user/UserList" import ChatPanel from "./chat/ChatPanel" import YoutubeSearch from "./search/YoutubeSearch" interface Props { id: string } let connecting = false const Room: FC = ({ id }) => { const [connected, setConnected] = useState(false) const [socket, setSocket] = useState | null>(null) const [url, setUrl] = useState("") useEffect(() => { fetch("/api/socketio").finally(() => { if (socket !== null) { setConnected(socket.connected) } else { const newSocket = createClientSocket(id) newSocket.on("connect", () => { setConnected(true) }) setSocket(newSocket) } }) return () => { if (socket !== null) { socket.disconnect() } } }, [id, socket]) const connectionCheck = () => { if (socket !== null && socket.connected) { connecting = false setConnected(true) return } setTimeout(connectionCheck, 100) } if (!connected || socket === null) { if (!connecting) { connecting = true connectionCheck() } return (
) } return (
{ console.log("Requesting", url, "now") socket?.emit("playUrl", url) setUrl("") }} > Play
{/* Chat + YouTube Search */}
) } export default Room