Files
nahodka-front/src/hooks/useChatSocket.js
2026-08-12 00:38:04 +03:00

31 lines
1.0 KiB
JavaScript

// 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 };
}