mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
mover ranager
This commit is contained in:
@@ -50,7 +50,7 @@
|
|||||||
- [ ] private rover access request service
|
- [ ] private rover access request service
|
||||||
- [ ] replay services (already partly split; reformat consistently)
|
- [ ] replay services (already partly split; reformat consistently)
|
||||||
- [ ] room camera services (already partly split; reformat consistently)
|
- [ ] room camera services (already partly split; reformat consistently)
|
||||||
- [ ] rover manager service
|
- [ ] rover manager service (in progress: constants/state extracted)
|
||||||
- [x] session service
|
- [x] session service
|
||||||
- [x] turn service
|
- [x] turn service
|
||||||
- [ ] verification service
|
- [ ] verification service
|
||||||
@@ -65,6 +65,7 @@
|
|||||||
- Folderized all files in `server/src/services/` into per-service folders with `index.js` entrypoints and updated internal relative imports for new path depth.
|
- Folderized all files in `server/src/services/` into per-service folders with `index.js` entrypoints and updated internal relative imports for new path depth.
|
||||||
- Split `server/src/services/turnService/index.js` by extracting constants, shared state helpers, and side-effect action helpers into `turnService/constants.js`, `turnService/state.js`, and `turnService/actions.js`.
|
- Split `server/src/services/turnService/index.js` by extracting constants, shared state helpers, and side-effect action helpers into `turnService/constants.js`, `turnService/state.js`, and `turnService/actions.js`.
|
||||||
- Split `server/src/services/sessionService/index.js` by extracting config/timing constants, sync-throttle state storage, and visibility filter helpers into `sessionService/constants.js`, `sessionService/state.js`, and `sessionService/filters.js`.
|
- Split `server/src/services/sessionService/index.js` by extracting config/timing constants, sync-throttle state storage, and visibility filter helpers into `sessionService/constants.js`, `sessionService/state.js`, and `sessionService/filters.js`.
|
||||||
|
- Began splitting `server/src/services/roverManager/index.js` by extracting immutable constants and shared state containers into `roverManager/constants.js` and `roverManager/state.js`.
|
||||||
|
|
||||||
## WebUI frontend
|
## WebUI frontend
|
||||||
### BIGGEST OFFENDERS
|
### BIGGEST OFFENDERS
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
// rover Manager constants
|
||||||
|
// Purpose: Defines rover-manager configuration constants and immutable default safety values.
|
||||||
|
// Scope: Keeps runtime behavior unchanged while isolating fixed thresholds and timing knobs.
|
||||||
|
const ALERT_COLOR = '#8bc34a';
|
||||||
|
const DOCK_GUARD_WINDOW_MS = 2 * 1000;
|
||||||
|
const IDLE_UNDOCKED_MS = 2 * 60 * 1000;
|
||||||
|
const PASSIVE_UNDOCKED_MS = 60 * 1000;
|
||||||
|
const DOCK_GUARD_RETRY_MS = 10 * 1000;
|
||||||
|
const DOCK_COMMAND_BASE64 = Buffer.from([143]).toString('base64');
|
||||||
|
const BACKOFF_MS = 500;
|
||||||
|
const BACKOFF_SPEED = 300;
|
||||||
|
const PRIVATE_BUTTON_HOLD_MS = 3000;
|
||||||
|
const PRIVATE_AUTO_CLOSE_IDLE_MS = 30 * 60 * 1000;
|
||||||
|
const PRIVATE_AUTO_CLOSE_TICK_MS = 30000;
|
||||||
|
const SAFETY_BACKOFF_MIN = -500;
|
||||||
|
const SAFETY_BACKOFF_MAX = 500;
|
||||||
|
|
||||||
|
const DEFAULT_PRIVATE_SAFETY = Object.freeze({
|
||||||
|
speedLimitEnabled: false,
|
||||||
|
speedLimitMaxWheelSpeed: 250,
|
||||||
|
hardOvercurrentEnabled: false,
|
||||||
|
overcurrentStopMs: 300,
|
||||||
|
hardBumpEnabled: false,
|
||||||
|
bumpBackoffSpeed: 250,
|
||||||
|
bumpBackoffMs: 350,
|
||||||
|
cliffEnabled: false,
|
||||||
|
cliffBackoffSpeed: 250,
|
||||||
|
cliffBackoffMs: 500,
|
||||||
|
triggerCooldownMs: 800,
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
ALERT_COLOR,
|
||||||
|
DOCK_GUARD_WINDOW_MS,
|
||||||
|
IDLE_UNDOCKED_MS,
|
||||||
|
PASSIVE_UNDOCKED_MS,
|
||||||
|
DOCK_GUARD_RETRY_MS,
|
||||||
|
DOCK_COMMAND_BASE64,
|
||||||
|
BACKOFF_MS,
|
||||||
|
BACKOFF_SPEED,
|
||||||
|
PRIVATE_BUTTON_HOLD_MS,
|
||||||
|
PRIVATE_AUTO_CLOSE_IDLE_MS,
|
||||||
|
PRIVATE_AUTO_CLOSE_TICK_MS,
|
||||||
|
SAFETY_BACKOFF_MIN,
|
||||||
|
SAFETY_BACKOFF_MAX,
|
||||||
|
DEFAULT_PRIVATE_SAFETY,
|
||||||
|
};
|
||||||
@@ -1,54 +1,43 @@
|
|||||||
// rover Manager
|
// rover Manager
|
||||||
// Purpose: Defines the rover Manager module and the helpers/state used by this service unit.
|
// Purpose: Defines the rover Manager module and the helpers/state used by this service unit.
|
||||||
// Scope: Keeps runtime behavior unchanged while isolating responsibilities into a clear module boundary.
|
// Scope: Keeps runtime behavior unchanged while isolating responsibilities into a clear module boundary.
|
||||||
const EventEmitter = require('events');
|
|
||||||
const io = require('../../globals/io');
|
const io = require('../../globals/io');
|
||||||
const logger = require('../../globals/logger').child('roverManager');
|
const logger = require('../../globals/logger').child('roverManager');
|
||||||
const { sendAlert } = require('../alertService');
|
const { sendAlert } = require('../alertService');
|
||||||
const ALERT_COLOR = '#8bc34a';
|
|
||||||
const { parseSensorFrame } = require('../../helpers/sensorDecoder');
|
const { parseSensorFrame } = require('../../helpers/sensorDecoder');
|
||||||
const { MODES, getMode } = require('../modeManager');
|
const { MODES, getMode } = require('../modeManager');
|
||||||
const { isAdmin, isLockdownAdmin, roleEvents } = require('../roleService');
|
const { isAdmin, isLockdownAdmin, roleEvents } = require('../roleService');
|
||||||
const { publishEvent } = require('../eventBus');
|
const { publishEvent } = require('../eventBus');
|
||||||
const videoSessions = require('../videoSessions');
|
const videoSessions = require('../videoSessions');
|
||||||
|
const {
|
||||||
const rovers = new Map(); // roverId -> record
|
ALERT_COLOR,
|
||||||
const socketToRovers = new Map(); // socketId -> Set(roverId)
|
DOCK_GUARD_WINDOW_MS,
|
||||||
const spectatorSockets = new Set();
|
IDLE_UNDOCKED_MS,
|
||||||
|
PASSIVE_UNDOCKED_MS,
|
||||||
|
DOCK_GUARD_RETRY_MS,
|
||||||
|
DOCK_COMMAND_BASE64,
|
||||||
|
BACKOFF_MS,
|
||||||
|
BACKOFF_SPEED,
|
||||||
|
PRIVATE_BUTTON_HOLD_MS,
|
||||||
|
PRIVATE_AUTO_CLOSE_IDLE_MS,
|
||||||
|
PRIVATE_AUTO_CLOSE_TICK_MS,
|
||||||
|
SAFETY_BACKOFF_MIN,
|
||||||
|
SAFETY_BACKOFF_MAX,
|
||||||
|
DEFAULT_PRIVATE_SAFETY,
|
||||||
|
} = require('./constants');
|
||||||
|
const {
|
||||||
|
rovers,
|
||||||
|
socketToRovers,
|
||||||
|
spectatorSockets,
|
||||||
|
managerEvents,
|
||||||
|
backoffTimers,
|
||||||
|
dockGuardStates,
|
||||||
|
privateButtonStates,
|
||||||
|
privateNoUsersSince,
|
||||||
|
privateSafetyTimers,
|
||||||
|
privateSafetyStates,
|
||||||
|
} = require('./state');
|
||||||
const turnService = require('../turnService');
|
const turnService = require('../turnService');
|
||||||
const managerEvents = new EventEmitter();
|
|
||||||
const DOCK_GUARD_WINDOW_MS = 2 * 1000;
|
|
||||||
const IDLE_UNDOCKED_MS = 2 * 60 * 1000;
|
|
||||||
const PASSIVE_UNDOCKED_MS = 60 * 1000;
|
|
||||||
const DOCK_GUARD_RETRY_MS = 10 * 1000;
|
|
||||||
const DOCK_COMMAND_BASE64 = Buffer.from([143]).toString('base64');
|
|
||||||
const BACKOFF_MS = 500;
|
|
||||||
const BACKOFF_SPEED = 300;
|
|
||||||
const PRIVATE_BUTTON_HOLD_MS = 3000;
|
|
||||||
const PRIVATE_AUTO_CLOSE_IDLE_MS = 30 * 60 * 1000;
|
|
||||||
const PRIVATE_AUTO_CLOSE_TICK_MS = 30000;
|
|
||||||
const SAFETY_BACKOFF_MIN = -500;
|
|
||||||
const SAFETY_BACKOFF_MAX = 500;
|
|
||||||
const backoffTimers = new Map(); // roverId -> Timeout
|
|
||||||
const dockGuardStates = new Map(); // roverId -> guard state
|
|
||||||
const privateButtonStates = new Map(); // roverId -> { pressedSince:number|null, latched:boolean }
|
|
||||||
const privateNoUsersSince = new Map(); // roverId -> timestamp|null
|
|
||||||
const privateSafetyTimers = new Map(); // roverId -> Timeout
|
|
||||||
const privateSafetyStates = new Map(); // roverId -> state
|
|
||||||
|
|
||||||
const DEFAULT_PRIVATE_SAFETY = Object.freeze({
|
|
||||||
speedLimitEnabled: false,
|
|
||||||
speedLimitMaxWheelSpeed: 250,
|
|
||||||
hardOvercurrentEnabled: false,
|
|
||||||
overcurrentStopMs: 300,
|
|
||||||
hardBumpEnabled: false,
|
|
||||||
bumpBackoffSpeed: 250,
|
|
||||||
bumpBackoffMs: 350,
|
|
||||||
cliffEnabled: false,
|
|
||||||
cliffBackoffSpeed: 250,
|
|
||||||
cliffBackoffMs: 500,
|
|
||||||
triggerCooldownMs: 800,
|
|
||||||
});
|
|
||||||
|
|
||||||
function parsePrivateMeta(meta = {}) {
|
function parsePrivateMeta(meta = {}) {
|
||||||
const raw = meta?.private;
|
const raw = meta?.private;
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
// rover Manager state
|
||||||
|
// Purpose: Defines shared mutable in-memory state containers used by rover-manager workflows.
|
||||||
|
// Scope: Keeps runtime behavior unchanged while centralizing service state maps/sets and events.
|
||||||
|
const EventEmitter = require('events');
|
||||||
|
|
||||||
|
const rovers = new Map();
|
||||||
|
const socketToRovers = new Map();
|
||||||
|
const spectatorSockets = new Set();
|
||||||
|
const managerEvents = new EventEmitter();
|
||||||
|
const backoffTimers = new Map();
|
||||||
|
const dockGuardStates = new Map();
|
||||||
|
const privateButtonStates = new Map();
|
||||||
|
const privateNoUsersSince = new Map();
|
||||||
|
const privateSafetyTimers = new Map();
|
||||||
|
const privateSafetyStates = new Map();
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
rovers,
|
||||||
|
socketToRovers,
|
||||||
|
spectatorSockets,
|
||||||
|
managerEvents,
|
||||||
|
backoffTimers,
|
||||||
|
dockGuardStates,
|
||||||
|
privateButtonStates,
|
||||||
|
privateNoUsersSince,
|
||||||
|
privateSafetyTimers,
|
||||||
|
privateSafetyStates,
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user