mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 09:31:20 -04:00
first lol
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
const io = require('../globals/io');
|
||||
const logger = require('../globals/logger').child('sessionService');
|
||||
const { getRole, roleEvents } = require('./roleService');
|
||||
const { getMode, modeEvents } = require('./modeManager');
|
||||
const roverManager = require('./roverManager');
|
||||
const { managerEvents } = roverManager;
|
||||
const assignmentService = require('./assignmentService');
|
||||
|
||||
function buildSession(socket) {
|
||||
return {
|
||||
role: getRole(socket),
|
||||
mode: getMode(),
|
||||
roster: roverManager.getRoster(),
|
||||
assignment: assignmentService.describeAssignment(socket?.id || ''),
|
||||
};
|
||||
}
|
||||
|
||||
function syncSocket(socket) {
|
||||
if (!socket) return;
|
||||
const payload = buildSession(socket);
|
||||
logger.info('Syncing session', socket.id, payload.role, payload.assignment);
|
||||
socket.emit('session:sync', payload);
|
||||
}
|
||||
|
||||
function syncAll() {
|
||||
logger.info('Broadcasting session sync to all sockets');
|
||||
io.sockets.sockets.forEach((socket) => syncSocket(socket));
|
||||
}
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
logger.info('New socket connected', socket.id);
|
||||
syncSocket(socket);
|
||||
});
|
||||
|
||||
roleEvents.on('change', ({ socket }) => {
|
||||
if (!socket) return;
|
||||
logger.info('Role changed; syncing session', socket.id);
|
||||
syncSocket(socket);
|
||||
});
|
||||
|
||||
assignmentService.assignmentEvents.on('update', (socketId) => {
|
||||
const socket = io.sockets.sockets.get(socketId);
|
||||
if (socket) {
|
||||
logger.info('Assignment update; syncing session', socketId);
|
||||
syncSocket(socket);
|
||||
}
|
||||
});
|
||||
|
||||
modeEvents.on('change', () => {
|
||||
logger.info('Mode change detected; syncing all clients');
|
||||
syncAll();
|
||||
});
|
||||
|
||||
managerEvents.on('rover', () => {
|
||||
logger.info('Rover roster change; syncing all clients');
|
||||
syncAll();
|
||||
});
|
||||
|
||||
managerEvents.on('lock', ({ roverId, locked }) => {
|
||||
logger.info('Rover lock change', roverId, locked);
|
||||
syncAll();
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
buildSession,
|
||||
syncSocket,
|
||||
syncAll,
|
||||
};
|
||||
Reference in New Issue
Block a user