UNPKG

@ethicdevs/react-global-state-hooks-debugger

Version:

A small websocket based debugger for use with the react-global-state-hooks library

60 lines (59 loc) 2.09 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeWsClient = void 0; // std const ws_1 = __importDefault(require("ws")); // lib const protocol_1 = require("./protocol"); const types_1 = require("./types"); function makeWsClient(wsUri = "ws://10.0.2.2:8080") { const sendRetryQueue = []; let ws = new ws_1.default(wsUri); let forceStopped = false; ws.onopen = function open() { ws.send(protocol_1.ProtocolPacketKind.Attach); if (sendRetryQueue.length <= 0) { sendRetryQueue.forEach((packetStr) => ws.send(packetStr)); } }; function recreateWebSocket() { if (forceStopped || ws.readyState === types_1.WS_READY_STATE.Open) { return undefined; } if (ws.readyState === types_1.WS_READY_STATE.Closed) { console.warn("[rgsh-debugger/logger] Lost connection to debugger. Sleeping 3s before reconnecting..."); } // Give it a grace period of 3s before reconnecting setTimeout(() => { if (ws.readyState !== types_1.WS_READY_STATE.Open) { ws = new ws_1.default(wsUri); } }, 1000 * 3); return undefined; } ws.onclose = recreateWebSocket; ws.onerror = recreateWebSocket; return { readyState: ws.readyState, async send(packet) { const packetStr = (0, protocol_1.serializePacket)(packet); if (ws.readyState === types_1.WS_READY_STATE.Open) { ws.send(packetStr); } else { sendRetryQueue.push(packetStr); } }, async stop(reason) { if (ws.readyState <= types_1.WS_READY_STATE.Open) { ws.send(protocol_1.ProtocolPacketKind.Dettach); ws.close(0, reason); forceStopped = true; } }, }; } exports.makeWsClient = makeWsClient;