Files
MultiRoombaRover/server/src/services/roomCameraService/index.js
T
legop3 ea4af2ebb3
Container image / image (push) Failing after 1m5s
add config option for room camera interval
2026-09-29 22:18:45 -04:00

50 lines
2.1 KiB
JavaScript

// Room Camera Service
// Purpose: Composes room camera catalog, snapshot streaming, socket delivery, and replay helpers in one service folder.
// Scope: Exposes the existing room-camera public API while preserving side-effect startup behavior.
const { loadFromConfig, getRoomCameras, getRoomCamera, roomCameraEvents } = require('./catalog');
const { createSnapshotEngine } = require('./snapshotEngine');
const { registerRoomCameraSocketGateway } = require('./socketGateway');
const replay = require('../replayEngineV2/roomCameraReplayBuilder');
const { loadConfig, registerConfigurationHandler } = require('../../configuration');
let enabled = false;
let streamIntervalMs = 2000;
const snapshotEngine = createSnapshotEngine({ getRoomCameras, roomCameraEvents });
function applyRoomCameraConfig(roomCameraConfig = {}) {
enabled = Boolean(roomCameraConfig.enabled);
streamIntervalMs = roomCameraConfig.streamIntervalMs ?? 2000;
// Loading an empty catalog on disable causes the snapshot engine's existing
// update listener to close every stream and timer without unregistering the
// stable browser gateway.
loadFromConfig(enabled ? roomCameraConfig : { cameras: [] });
}
registerRoomCameraSocketGateway({
getStreamIntervalMs: () => streamIntervalMs,
getRoomCamera,
getRoomCameras,
getRoomCameraState: snapshotEngine.getRoomCameraState,
roomCameraStreamEvents: snapshotEngine.roomCameraStreamEvents,
});
applyRoomCameraConfig(loadConfig().roomCameras || {});
registerConfigurationHandler('roomCameras', applyRoomCameraConfig);
function buildRoomCameraReplayVideo(options = {}) {
return replay.buildRoomCameraReplayVideo(options, { getRoomCamera, getRoomCameras });
}
module.exports = {
getRoomCameras,
getRoomCamera,
roomCameraEvents,
roomCameraStreamEvents: snapshotEngine.roomCameraStreamEvents,
getRoomCameraState: snapshotEngine.getRoomCameraState,
recordRoomCameraFrame: replay.recordRoomCameraFrame,
clearRoomCameraReplayFrames: replay.clearRoomCameraReplayFrames,
getRoomCameraReplayMetadata: replay.getRoomCameraReplayMetadata,
buildRoomCameraReplayVideo,
roomCameraReplayEvents: replay.roomCameraReplayEvents,
};