import { WEBSOCKET_BASE_URL } from '@/config/setting'; 
 | 
  
 | 
export default class WebSocketClient { 
 | 
  
 | 
    constructor(path) { 
 | 
        this.url = WEBSOCKET_BASE_URL + path; 
 | 
        this.webSocket = null; 
 | 
        this.heartbeatInterval = null; // Store the interval ID 
 | 
        this.heartbeatFrequency = 30000; // Heartbeat every 30 seconds 
 | 
    } 
 | 
  
 | 
    connect() { 
 | 
        if (!this.url) { 
 | 
            console.error('WebSocketClient: Cannot connect without url.'); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        this.webSocket = new WebSocket(this.url); 
 | 
  
 | 
        this.webSocket.onopen = (event) => { 
 | 
            console.log('websocket connection opened.'); 
 | 
            // Start the heartbeat 
 | 
            this.startHeartbeat(); 
 | 
        }; 
 | 
  
 | 
        this.webSocket.onmessage = (event) => { 
 | 
            // console.log('websocket message received:', event.data); 
 | 
            this.onMessage(event.data); 
 | 
        }; 
 | 
  
 | 
        this.webSocket.onerror = (event) => { 
 | 
            console.error('websocket error observed:', event); 
 | 
        }; 
 | 
  
 | 
        this.webSocket.onclose = (event) => { 
 | 
            console.log('websocket connection closed!'); 
 | 
            // Clear the heartbeat 
 | 
            this.stopHeartbeat();    
 | 
            this.reconnect(); 
 | 
        }; 
 | 
    } 
 | 
  
 | 
    sendMessage(message) { 
 | 
        if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) { 
 | 
            this.webSocket.send(message); 
 | 
        } else { 
 | 
            console.error('WebSocketClient: Cannot send message, WebSocket connection is not open.'); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    // Override 
 | 
    onMessage(data) { 
 | 
    } 
 | 
  
 | 
    close() { 
 | 
        if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) { 
 | 
            this.webSocket.close(); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    reconnect() { 
 | 
        setTimeout(() => { 
 | 
            console.log('WebSocketClient: Attempting to reconnect...'); 
 | 
            this.connect(); 
 | 
        }, 3000); 
 | 
    } 
 | 
  
 | 
    startHeartbeat() { 
 | 
        if(this.heartbeatInterval) { 
 | 
            clearInterval(this.heartbeatInterval); 
 | 
        } 
 | 
        this.heartbeatInterval = setInterval(() => { 
 | 
            this.sendMessage('1'); 
 | 
        }, this.heartbeatFrequency); 
 | 
    } 
 | 
  
 | 
    stopHeartbeat() { 
 | 
        if (this.heartbeatInterval) { 
 | 
            clearInterval(this.heartbeatInterval); 
 | 
            this.heartbeatInterval = null; 
 | 
        } 
 | 
    } 
 | 
} 
 |