roverdometer

This commit is contained in:
legop3
2026-06-19 16:37:47 -04:00
parent 39bb53104e
commit 3bad454e0d
13 changed files with 726 additions and 32 deletions
+18
View File
@@ -5,6 +5,7 @@ const io = require('../../globals/io');
const logger = require('../../globals/logger').child('roverManager');
const { sendAlert } = require('../alertService');
const { parseSensorFrame } = require('../../helpers/sensorDecoder');
const odometerService = require('../odometerService');
const { MODES, getMode } = require('../modeManager');
const { isAdmin, isLockdownAdmin, roleEvents } = require('../roleService');
const { publishEvent } = require('../eventBus');
@@ -174,6 +175,7 @@ const sensorPipeline = createSensorPipeline({
ALERT_COLOR,
sendAlert,
publishEvent,
processOdometerFrame: odometerService.processSensorFrame,
isPrivateRecord,
isPrivateOpen,
getPrivateSafety,
@@ -197,6 +199,11 @@ function canReplayRoverId(roverId, socket = null) {
return socket ? isRoverVisibleToSocket(record, socket) : false;
}
function getOdometersForSocket(socket) {
const visibleIds = getRosterForSocket(socket).map((entry) => entry.id);
return odometerService.getSnapshots(visibleIds);
}
roleEvents.on('change', ({ socket, role }) => {
if (role === 'spectator') {
enableSpectator(socket);
@@ -231,6 +238,16 @@ registerSocketHandlers({
setPrivateOpen,
lockRover,
setPrivateSafety,
getOdometersForSocket,
});
odometerService.odometerEvents.on('update', ({ roverId, odometer }) => {
io.sockets.sockets.forEach((socket) => {
const record = rovers.get(String(roverId));
if (isRoverVisibleToSocket(record, socket)) {
socket.volatile.emit('odometer:update', { roverId, odometer });
}
});
});
setInterval(tickPrivateAutoClose, PRIVATE_AUTO_CLOSE_TICK_MS);
@@ -262,4 +279,5 @@ module.exports = {
canRequestControl,
applyPrivateDriveSafety,
canReplayRoverId,
getOdometersForSocket,
};