This commit is contained in:
legop3
2025-11-17 04:26:00 -05:00
parent a6995e0789
commit 37dbb1c5d9
5 changed files with 39 additions and 16 deletions
+8
View File
@@ -5,13 +5,16 @@ const { getMode, modeEvents } = require('./modeManager');
const roverManager = require('./roverManager');
const { managerEvents } = roverManager;
const assignmentService = require('./assignmentService');
const { getActiveDrivers, turnEvents } = require('./turnService');
function buildSession(socket) {
return {
socketId: socket?.id || null,
role: getRole(socket),
mode: getMode(),
roster: roverManager.getRoster(),
assignment: assignmentService.describeAssignment(socket?.id || ''),
activeDrivers: getActiveDrivers(),
};
}
@@ -61,6 +64,11 @@ managerEvents.on('lock', ({ roverId, locked }) => {
syncAll();
});
turnEvents.on('activeDriver', () => {
logger.info('Active driver change; syncing all clients');
syncAll();
});
module.exports = {
buildSession,
syncSocket,
+13 -1
View File
@@ -1,3 +1,4 @@
const EventEmitter = require('events');
const io = require('../globals/io');
const { sendAlert, COLORS } = require('./alertService');
const { MODES, getMode, modeEvents } = require('./modeManager');
@@ -5,6 +6,7 @@ const { MODES, getMode, modeEvents } = require('./modeManager');
const driverQueues = new Map(); // roverId -> { queue: [], current: socketId, timer: Timeout | null }
const activeDrivers = new Map();
const TURN_DURATION_MS = 60 * 1000;
const turnEvents = new EventEmitter();
function driverAdded(roverId, socketId, force) {
const queue = ensureQueue(roverId);
@@ -104,7 +106,15 @@ function setActiveDriver(roverId, socketId) {
} else {
activeDrivers.set(roverId, socketId);
}
io.emit('activeDriver', { roverId, socketId });
turnEvents.emit('activeDriver', { roverId, socketId });
}
function getActiveDrivers() {
const map = {};
activeDrivers.forEach((socketId, roverId) => {
map[roverId] = socketId;
});
return map;
}
function stopRover(roverId) {
@@ -126,4 +136,6 @@ module.exports = {
driverRemoved,
cleanupRover,
canDrive,
getActiveDrivers,
turnEvents,
};