mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-11-14 18:58:49 -05:00
basically moving docking flows to the server instead of being in the web UI
This commit is contained in:
@@ -274,6 +274,7 @@ odometerService.odometerEvents.on('update', ({ roverId, odometer }) => {
|
||||
setInterval(tickPrivateAutoClose, PRIVATE_AUTO_CLOSE_TICK_MS);
|
||||
|
||||
module.exports = {
|
||||
stopDockGuard,
|
||||
upsertRover,
|
||||
removeRover,
|
||||
lockRover,
|
||||
|
||||
@@ -117,6 +117,7 @@ function createRosterLifecycle(deps) {
|
||||
offline, while removeRoverDrivers still receives the captured record so
|
||||
it can clean the reverse membership index and Socket.IO room membership.
|
||||
*/
|
||||
require('../dockingService').disconnect(record);
|
||||
rovers.delete(id);
|
||||
removeRoverDrivers(id, record);
|
||||
stopDockGuard(id);
|
||||
|
||||
@@ -389,6 +389,10 @@ function createSensorPipeline(deps) {
|
||||
|
||||
function evaluateDockGuard(record, sensors) {
|
||||
if (!record || !sensors) return;
|
||||
if (sensors.docking?.phase === 'undocking' || sensors.docking?.phase === 'assisting') {
|
||||
stopDockGuard(record.id);
|
||||
return;
|
||||
}
|
||||
const state = getDockGuardState(record.id);
|
||||
const now = Date.now();
|
||||
const docked = Boolean(sensors?.chargingSources?.homeBase);
|
||||
@@ -564,6 +568,10 @@ function createSensorPipeline(deps) {
|
||||
};
|
||||
record.lastSensor = { raw: frame, decoded };
|
||||
}
|
||||
if (decoded) {
|
||||
decoded = { ...decoded, docking: require('../dockingService').processTelemetry(record, decoded) };
|
||||
record.lastSensor = { raw: frame, decoded };
|
||||
}
|
||||
/*
|
||||
Rover manager remains responsible only for decoding and routing sensor
|
||||
frames. The dedicated service receives the completed sensor object after
|
||||
@@ -577,6 +585,7 @@ function createSensorPipeline(deps) {
|
||||
const overcurrentProtection = decoded && typeof processOvercurrentTelemetry === 'function'
|
||||
? processOvercurrentTelemetry(roverId, decoded)
|
||||
: null;
|
||||
record.lastOvercurrentProtection = overcurrentProtection;
|
||||
updateMovement(record, decoded);
|
||||
const hasDockInfo = decoded?.chargingSources != null;
|
||||
if (hasDockInfo) {
|
||||
@@ -589,6 +598,10 @@ function createSensorPipeline(deps) {
|
||||
if (bumps?.bumpLeft || bumps?.bumpRight) record.lastBumpAt = Date.now();
|
||||
handlePrivateButtonHold(record, decoded);
|
||||
evaluatePrivateSafety(record, decoded);
|
||||
if (decoded) {
|
||||
decoded = { ...decoded, docking: require('../dockingService').snapshot(record) };
|
||||
record.lastSensor = { raw: frame, decoded };
|
||||
}
|
||||
io.to(record.room).volatile.emit('sensorFrame', {
|
||||
roverId,
|
||||
frame,
|
||||
|
||||
Reference in New Issue
Block a user