@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
JavaScript
;
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;