Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
www
/
mudeer-web-backup30April26
/
src
/
hooks
/
Filename :
useWebSocket.ts
back
Copy
'use client' import { useEffect } from 'react'; import { io, Socket } from 'socket.io-client'; import { useAuth } from '@/app/Providers/AuthContext'; import Swal from 'sweetalert2'; export const useWebSocket = () => { const { logout, isAuthenticated } = useAuth(); useEffect(() => { if (!isAuthenticated) return; const token = typeof window !== 'undefined' ? localStorage.getItem('token') : null; if (!token) return; const MUDEER_API_URL = process.env.NEXT_PUBLIC_MUDEER_URL; if (!MUDEER_API_URL) { console.error('NEXT_PUBLIC_MUDEER_URL is not defined'); return; } const socket: Socket = io(MUDEER_API_URL, { auth: { token }, transports: ['websocket', 'polling'], reconnectionAttempts: 5, reconnectionDelay: 1000, timeout: 10000, }); socket.on('connect', () => { console.log('WebSocket connected'); }); socket.on('user_update', (data) => { if (data.type === 'ROLE_CHANGE') { Swal.fire({ icon: 'info', title: 'Role Changed', text: data.data.action === 'promoted' ? `You have been promoted to ${data.data.newRole}!` : `You have been removed as department head. Please login again.`, confirmButtonText: 'OK', allowOutsideClick: false }).then(() => { logout(); window.location.href = '/signin?reason=role_changed'; }); } }); socket.on('connect_error', (error) => { console.error('WebSocket connection error:', error.message); if (error.message === 'Authentication error') { console.error('Token is invalid, logging out'); logout(); } }); socket.on('reconnect_failed', () => { console.error('Failed to reconnect after multiple attempts'); }); socket.on('reconnect', (attemptNumber) => { console.log(`Reconnected after ${attemptNumber} attempts`); }); return () => { socket.disconnect(); }; }, [isAuthenticated, logout]); };