reconnect clients

This commit is contained in:
Gavin McDonald
2025-07-02 14:47:36 -04:00
parent 522fdf106e
commit 2f861dbd38

View File

@@ -1,4 +1,4 @@
import { useEffect } from 'react'; import { useEffect, useState } from 'react';
import { socket } from '@/socket'; import { socket } from '@/socket';
import type { GameUpdate, Tilt } from '@/types'; import type { GameUpdate, Tilt } from '@/types';
@@ -9,11 +9,15 @@ interface UseSocketProps {
} }
export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketProps) { export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketProps) {
const [connect, setConnect] = useState(1);
const [disconnected, setDisconnected] = useState(true);
useEffect(() => { useEffect(() => {
if (gameID) { if (gameID) {
socket.emit('join', gameID); socket.emit('join', gameID);
socket.on('init', (data: GameUpdate) => { socket.on('init', (data: GameUpdate) => {
setDisconnected(false);
setGameData(data); setGameData(data);
}); });
@@ -31,14 +35,20 @@ export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketP
socket.on('flip-error', (error) => { socket.on('flip-error', (error) => {
console.error('Error:', error); console.error('Error:', error);
}); });
socket.on('disconnect', () => {
setDisconnected(true);
});
} }
return () => { return () => {
socket.removeAllListeners(); socket.removeAllListeners();
}; };
}, [gameID]); }, [gameID, connect]);
const emitFlip = (cardIndex: number) => { const emitFlip = (cardIndex: number) => {
if (disconnected) setConnect(connect + 1);
socket.emit('flip-card', { socket.emit('flip-card', {
gameID, gameID,
cardIndex, cardIndex,
@@ -46,6 +56,8 @@ export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketP
}; };
const emitSettings = (gameData: GameUpdate) => { const emitSettings = (gameData: GameUpdate) => {
if (disconnected) setConnect(connect + 1);
socket.emit('settings', { socket.emit('settings', {
gameID, gameID,
gameData, gameData,
@@ -53,6 +65,8 @@ export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketP
}; };
const emitRedraw = (cardIndex: number) => { const emitRedraw = (cardIndex: number) => {
if (disconnected) setConnect(connect + 1);
socket.emit('redraw', { socket.emit('redraw', {
gameID, gameID,
cardIndex, cardIndex,
@@ -60,6 +74,8 @@ export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketP
}; };
const emitSelect = (cardIndex: number, cardID: string) => { const emitSelect = (cardIndex: number, cardID: string) => {
if (disconnected) setConnect(connect + 1);
socket.emit('select', { socket.emit('select', {
gameID, gameID,
cardIndex, cardIndex,
@@ -68,6 +84,8 @@ export default function useSocket({ gameID, setGameData, setNoGame }: UseSocketP
}; };
const emitTilt = (cardIndex: number, tilt: Tilt) => { const emitTilt = (cardIndex: number, tilt: Tilt) => {
if (disconnected) setConnect(connect + 1);
socket.emit('tilt', { socket.emit('tilt', {
cardIndex, cardIndex,
tilt, tilt,