/
Moss
/
Diplom
Обзор
Документация
Войти
/
Moss
/
Diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
client/src/hooks/useSocket.ts
54 строки
1 KB
Kursovaya
lol
08 июн 2025, 18:06
08 июн 2025, 18:06
c28cde0
Код
Авторство
О чём код?
import { useEffect, useState } from 'react'; import { io, Socket } from 'socket.io-client'; import type { Message } from '../types/api'; interface UseSocketResult { socket: Socket | null; isConnected: boolean; error: Error | null; } export const useSocket = (listingId?: string): UseSocketResult => { const [socket, setSocket] = useState<Socket | null>(null); const [isConnected, setIsConnected] = useState(false); const [error, setError] = useState<Error | null>(null); useEffect(() => { const token = localStorage.getItem('token'); if (!token) { setError(new Error('Authentication required')); return; } const newSocket = io(import.meta.env.VITE_API_URL || 'http://localhost:5000', { auth: { token }, query: listingId ? { listingId } : undefined, }); newSocket.on('connect', () => { setIsConnected(true); setError(null); }); newSocket.on('connect_error', (err) => { setIsConnected(false); setError(err); }); newSocket.on('disconnect', () => { setIsConnected(false); }); setSocket(newSocket); return () => { newSocket.close(); }; }, [listingId]); return { socket, isConnected, error, }; };