UNPKG

integration-websocket-rest-api

Version:

A JavaScript library for easy integration of REST API and WebSocket communication with state management in JS applications.

88 lines (73 loc) 1.89 kB
const { store, wsOpened, wsMessageReceived, wsError, wsClosed, } = require("./state-management"); const WebSocket = require("websocket").w3cwebsocket; class WebSocketClient { constructor(wsUrl) { this.wsUrl = wsUrl; this.socket = null; this.isReconnecting = false; this.reconnectInterval = null; } openConnection() { this.connect(); } connect() { this.socket = new WebSocket(this.wsUrl); this.socket.onopen = () => { this.isReconnecting = false; store.dispatch(wsOpened()); }; this.socket.onmessage = (event) => { const message = event.data; store.dispatch(wsMessageReceived(message)); }; this.socket.onerror = (error) => { store.dispatch(wsError(error)); }; this.socket.onclose = () => { store.dispatch(wsClosed()); if (!this.isReconnecting) { this.reconnect(); } }; } reconnect() { this.isReconnecting = true; const maxRetries = 3; let retries = 0; const delay = 1000; this.reconnectInterval = setInterval(() => { if (retries < maxRetries) { console.log( `Attempting to reconnect. Remaining retries: ${maxRetries - retries}` ); this.connect(); retries++; } else { clearInterval(this.reconnectInterval); console.error("Max retries reached. Unable to reconnect."); } }, delay); } sendMessage(message) { if (this.socket && this.socket.readyState === WebSocket.OPEN) { this.socket.send(message); } else { console.error("WebSocket connection is not open."); } } closeConnection() { if (this.reconnectInterval) { clearInterval(this.reconnectInterval); } if (this.socket && this.socket.readyState === WebSocket.OPEN) { this.socket.close(); } } } module.exports = WebSocketClient;