import { useEffect, useRef, useState } from "react"; import { WSMessage } from "@shared/schema"; export function useWebSocket(onMessage: (message: WSMessage) => void) { const [isConnected, setIsConnected] = useState(false); const [userCount, setUserCount] = useState(0); const ws = useRef(null); useEffect(() => { const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; const wsUrl = `${protocol}//${window.location.host}/ws`; ws.current = new WebSocket(wsUrl); ws.current.onopen = () => { setIsConnected(true); }; ws.current.onmessage = (event) => { try { const message: WSMessage = JSON.parse(event.data); if (message.type === "user_count") { setUserCount(message.data.count); } onMessage(message); } catch (error) { console.error("Failed to parse WebSocket message:", error); } }; ws.current.onclose = () => { setIsConnected(false); }; ws.current.onerror = () => { setIsConnected(false); }; return () => { if (ws.current) { ws.current.close(); } }; }, [onMessage]); return { isConnected, userCount }; }