| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import { useEffect, useState, useCallback } from 'react';
- import { io, Socket } from 'socket.io-client';
- import { useAuth } from '../../../hooks.tsx';
- interface ExamData {
- roomId: string;
- question: {
- date: string;
- price: number;
- };
- }
- interface StockSocketClient {
- // connect(): void;
- // disconnect(): void;
- pushExamData(data: { roomId: string; question: { date: string; price: number } }): void;
- error: Error | null;
- isConnected: boolean;
- }
- export function useStockSocket(classRoom: string | null): StockSocketClient {
- const { token } = useAuth();
- const [socket, setSocket] = useState<Socket | null>(null);
- const [error, setError] = useState<Error | null>(null);
- const [isConnected, setIsConnected] = useState(false);
- // 初始化socket连接
- useEffect(() => {
- if (!token || !classRoom) return;
- const newSocket = io('/', {
- path: '/socket.io',
- transports: ['websocket'],
- withCredentials: true,
- query: {
- socket_token:token
- },
- reconnection: true,
- reconnectionAttempts: 5,
- reconnectionDelay: 1000,
- });
- newSocket.on('connect', () => {
- console.log('Exam socket connected');
- setIsConnected(true);
- });
- newSocket.on('disconnect', () => {
- console.log('Exam socket disconnected');
- setIsConnected(false);
- });
- newSocket.on('error', (err) => {
- console.error('Exam socket error:', err);
- setError(err);
- });
- setSocket(newSocket);
- return () => {
- newSocket.disconnect();
- };
- }, [token]);
- // const connect = useCallback(() => {
- // if (socket && !socket.connected) {
- // socket.connect();
- // }
- // }, [socket]);
- // const disconnect = useCallback(() => {
- // if (socket && socket.connected) {
- // socket.disconnect();
- // }
- // }, [socket]);
- const pushExamData = useCallback((data: ExamData) => {
- if (socket) {
- socket.emit('exam:question', {
- roomId: data.roomId,
- question: {
- date: data.question.date,
- price: data.question.price
- }
- });
- }
- }, [socket]);
- return {
- // connect,
- // disconnect,
- pushExamData,
- error,
- isConnected,
- };
- }
|