// WebSocket communication module export class WebSocketManager { constructor(onMessage, onStatusChange) { this.websocket = null; this.onMessage = onMessage; this.onStatusChange = onStatusChange; } async connect() { const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:'; const wsUrl = `${protocol}//${window.location.host}/ws`; try { this.websocket = new WebSocket(wsUrl); this.websocket.onopen = () => { console.log('WebSocket connected'); this.onStatusChange('connected'); }; this.websocket.onclose = () => { console.log('WebSocket disconnected'); this.onStatusChange('disconnected'); // Reconnect after 5 seconds setTimeout(() => this.connect(), 5000); }; this.websocket.onerror = (error) => { console.error('WebSocket error:', error); this.onStatusChange('disconnected'); }; this.websocket.onmessage = (event) => { try { const message = JSON.parse(event.data); // Debug: Log WebSocket messages to see what we're receiving if (message.data && message.data.aircraft) { const aircraftCount = Object.keys(message.data.aircraft).length; console.log(`📡 WebSocket: ${message.type} with ${aircraftCount} aircraft`); // Log first few aircraft with coordinates let count = 0; for (const [icao, aircraft] of Object.entries(message.data.aircraft)) { if (count < 3 && aircraft.Latitude && aircraft.Longitude) { console.log(`📡 ${icao}: lat=${aircraft.Latitude}, lon=${aircraft.Longitude}`); } count++; } } this.onMessage(message); } catch (error) { console.error('Failed to parse WebSocket message:', error); } }; } catch (error) { console.error('WebSocket connection failed:', error); this.onStatusChange('disconnected'); } } disconnect() { if (this.websocket) { this.websocket.close(); this.websocket = null; } } }