mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-17 01:50:47 -04:00
roverdometer
This commit is contained in:
@@ -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,
|
||||
};
|
||||
|
||||
@@ -29,6 +29,7 @@ function createSensorPipeline(deps) {
|
||||
ALERT_COLOR,
|
||||
sendAlert,
|
||||
publishEvent,
|
||||
processOdometerFrame,
|
||||
isPrivateRecord,
|
||||
isPrivateOpen,
|
||||
getPrivateSafety,
|
||||
@@ -364,6 +365,9 @@ function createSensorPipeline(deps) {
|
||||
const decoded = parseSensorFrame(frame.data);
|
||||
record.lastSensor = { raw: frame, decoded };
|
||||
record.batteryState = computeBatteryState(record, decoded);
|
||||
if (typeof processOdometerFrame === 'function') {
|
||||
processOdometerFrame(roverId, decoded);
|
||||
}
|
||||
updateMovement(record, decoded);
|
||||
const hasDockInfo = decoded?.chargingSources != null;
|
||||
if (hasDockInfo) {
|
||||
|
||||
@@ -28,6 +28,7 @@ function registerSocketHandlers(deps) {
|
||||
setPrivateOpen,
|
||||
lockRover,
|
||||
setPrivateSafety,
|
||||
getOdometersForSocket,
|
||||
} = deps;
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
@@ -177,6 +178,14 @@ function registerSocketHandlers(deps) {
|
||||
cb({ success: true });
|
||||
}
|
||||
|
||||
function handleOdometerSubscribe(_, cb = () => {}) {
|
||||
try {
|
||||
cb({ success: true, odometers: getOdometersForSocket(socket) });
|
||||
} catch (err) {
|
||||
cb({ error: err.message });
|
||||
}
|
||||
}
|
||||
|
||||
socket.on('requestControl', handleRequestControl);
|
||||
socket.on('session:requestControl', handleRequestControl);
|
||||
socket.on('releaseControl', handleReleaseControl);
|
||||
@@ -187,6 +196,7 @@ function registerSocketHandlers(deps) {
|
||||
socket.on('session:privateSafety:set', handlePrivateSafetySet);
|
||||
socket.on('subscribeAll', handleSubscribeAll);
|
||||
socket.on('session:subscribeAll', handleSubscribeAll);
|
||||
socket.on('odometer:subscribe', handleOdometerSubscribe);
|
||||
|
||||
socket.on('disconnecting', () => {
|
||||
logger.info('Socket disconnecting', socket.id);
|
||||
|
||||
Reference in New Issue
Block a user