// src/hooks/useChatSocket.js import { useEffect, useRef, useCallback } from "react"; import { useStompClient, parseStompMessage } from "./useStompClient"; export function useChatSocket(chatId, onMessage) { const onMessageRef = useRef(onMessage); useEffect(() => { onMessageRef.current = onMessage; }, [onMessage]); const handleConnect = useCallback((client) => { client.subscribe(`/topic/chat/${chatId}`, (msg) => { parseStompMessage(msg, (body) => onMessageRef.current(body)); }); }, [chatId]); const { clientRef, connected } = useStompClient(!!chatId, handleConnect); /** @returns {boolean} true если сообщение реально ушло в сокет, false если соединения нет */ const sendMessage = useCallback((content) => { if (!clientRef.current?.connected) return false; clientRef.current.publish({ destination: "/app/chat.send", body: JSON.stringify({ chatId, content }), }); return true; }, [chatId, clientRef]); return { connected, sendMessage }; }