Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| import { useEffect, useRef, useState, useCallback } from 'react'; | |
| import { io } from 'socket.io-client'; | |
| const WS_URL = import.meta.env.VITE_WS_URL || 'http://localhost:5000'; | |
| export const useWebSocket = (scanId = null) => { | |
| const [isConnected, setIsConnected] = useState(false); | |
| const [logs, setLogs] = useState([]); | |
| const [vulnerabilities, setVulnerabilities] = useState([]); | |
| const [scanProgress, setScanProgress] = useState({}); | |
| const socketRef = useRef(null); | |
| useEffect(() => { | |
| if (!scanId) return; | |
| const socket = io(WS_URL, { | |
| transports: ['websocket', 'polling'], | |
| reconnection: true, | |
| reconnectionAttempts: 5, | |
| reconnectionDelay: 1000, | |
| }); | |
| socketRef.current = socket; | |
| socket.on('connect', () => { | |
| setIsConnected(true); | |
| console.log('WebSocket connected'); | |
| socket.emit('join_scan', { scan_id: scanId }); | |
| }); | |
| socket.on('disconnect', () => { | |
| setIsConnected(false); | |
| console.log('WebSocket disconnected'); | |
| }); | |
| socket.on('joined_scan', (data) => { | |
| console.log('Joined scan room:', data); | |
| }); | |
| socket.on('scan_log', (data) => { | |
| setLogs(prev => [...prev, data]); | |
| }); | |
| socket.on('vulnerability_found', (data) => { | |
| setVulnerabilities(prev => [...prev, data]); | |
| }); | |
| socket.on('scan_progress', (data) => { | |
| setScanProgress(prev => ({ ...prev, ...data })); | |
| }); | |
| socket.on('left_scan', (data) => { | |
| console.log('Left scan room:', data); | |
| }); | |
| return () => { | |
| if (socketRef.current) { | |
| socket.emit('leave_scan', { scan_id: scanId }); | |
| socket.disconnect(); | |
| } | |
| }; | |
| }, [scanId]); | |
| const clearLogs = useCallback(() => { | |
| setLogs([]); | |
| }, []); | |
| const clearVulnerabilities = useCallback(() => { | |
| setVulnerabilities([]); | |
| }, []); | |
| return { | |
| isConnected, | |
| logs, | |
| vulnerabilities, | |
| scanProgress, | |
| clearLogs, | |
| clearVulnerabilities, | |
| }; | |
| }; | |