UNPKG

@robotical/sensors-dashboard

Version:

A dashboard tool for depicting Marty data by Robotical

146 lines (145 loc) 5.78 kB
"use strict"; require("core-js/modules/es.symbol.description.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.setupMockEnvironment = exports.isMockRaft = exports.default = void 0; require("core-js/modules/es.regexp.to-string.js"); require("core-js/modules/web.dom-collections.iterator.js"); require("core-js/modules/esnext.iterator.constructor.js"); require("core-js/modules/esnext.iterator.for-each.js"); require("core-js/modules/es.promise.js"); require("core-js/modules/esnext.iterator.map.js"); var _SelectedRaftContext = require("@robotical/webapp-types/dist-types/src/store/SelectedRaftContext"); var _raft = require("@robotical/webapp-types/dist-types/src/types/raft"); function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } const createMockRaftId = prefix => "".concat(prefix, "-").concat(Math.random().toString(36).slice(2, 8)); const clamp = (value, min, max) => Math.min(Math.max(value, min), max); const mutateNumber = (value, min, max, maxDelta) => { const delta = (Math.random() * 2 - 1) * maxDelta; const next = value + delta; return Math.round(clamp(next, min, max)); }; const createMockRaft = (type, name) => { const observers = new Map(); const robotType = type === _raft.RaftTypeE.MARTY ? "marty" : "cog"; let batteryLevel = type === _raft.RaftTypeE.MARTY ? 82 : 88; let rssiLevel = -60; const raft = { id: createMockRaftId(robotType), type, name, isMock: true, mockRobotType: robotType, subscribe(observer, topics) { topics.forEach(topic => { if (!observers.has(topic)) { observers.set(topic, new Set()); } observers.get(topic).add(observer); }); }, unsubscribe(observer) { observers.forEach(set => { set.delete(observer); }); }, emit(eventType, eventEnum, eventName, eventData) { const observersForTopic = observers.get(eventType); if (!observersForTopic) return; observersForTopic.forEach(observer => { try { observer.notify(eventType, eventEnum, eventName, eventData); } catch (error) { console.error("[MockRaft] Observer notify failed", error); } }); }, getBatteryStrength() { batteryLevel = mutateNumber(batteryLevel, 40, 100, 3); return batteryLevel; }, getRSSI() { rssiLevel = mutateNumber(rssiLevel, -90, -45, 4); return rssiLevel; }, async getRaftName() { return name; }, // The following are stubs to satisfy consumers that might call them. getRaftVersion() { return "mock-1.0.0"; }, getSerialNumber() { return "MOCK-RA0B0T"; }, getFriendlyName() { return name; } }; return raft; }; const isMockRaft = raft => Boolean(raft.isMock); exports.isMockRaft = isMockRaft; class MockApplicationManager { constructor() { _defineProperty(this, "connectedRafts", {}); _defineProperty(this, "connectedRaftsContext", [{ id: _SelectedRaftContext.NewRobotIdE.NEW, name: "Connect a robot", type: _raft.RaftTypeE.MARTY, isSelected: false }]); _defineProperty(this, "mockCounters", { marty: 1, cog: 1 }); _defineProperty(this, "mockTypeOrder", [_raft.RaftTypeE.MARTY, _raft.RaftTypeE.COG]); _defineProperty(this, "nextTypeIndex", 0); } async connectGeneric(afterRaftConnectedCb) { const type = this.mockTypeOrder[this.nextTypeIndex % this.mockTypeOrder.length]; this.nextTypeIndex += 1; const name = type === _raft.RaftTypeE.MARTY ? "Mock Marty ".concat(this.mockCounters.marty++) : "Mock Cog ".concat(this.mockCounters.cog++); const raft = createMockRaft(type, name); this.connectedRafts[raft.id] = raft; this.refreshConnectedContext(raft.id); afterRaftConnectedCb === null || afterRaftConnectedCb === void 0 ? void 0 : afterRaftConnectedCb(raft); } async disconnectGeneric(raft, afterRaftDisconnectedCb) { const mockRaft = raft; delete this.connectedRafts[mockRaft.id]; mockRaft.emit("conn", 3, "BLE_DISCONNECTED", null); this.refreshConnectedContext(); afterRaftDisconnectedCb === null || afterRaftDisconnectedCb === void 0 ? void 0 : afterRaftDisconnectedCb(); } refreshConnectedContext(selectedId) { const baseEntry = { id: _SelectedRaftContext.NewRobotIdE.NEW, name: "Connect a robot", type: _raft.RaftTypeE.MARTY, isSelected: false }; const connectedEntries = Object.values(this.connectedRafts).map((raft, index) => { const typedRaft = raft; return { id: typedRaft.id, name: typedRaft.name, type: typedRaft.type, isSelected: selectedId ? typedRaft.id === selectedId : index === 0 }; }); this.connectedRaftsContext = [baseEntry, ...connectedEntries]; } } exports.default = MockApplicationManager; const setupMockEnvironment = () => { if (typeof window === "undefined") return; if (window.applicationManager) return; const mockManager = new MockApplicationManager(); window.applicationManager = mockManager; console.info("[MockApplicationManager] No application manager detected, using mock robots."); }; exports.setupMockEnvironment = setupMockEnvironment;