mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
admin
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,8 +5,8 @@
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>webui</title>
|
||||
<script type="module" crossorigin src="/assets/index-we2n3Zya.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-C9u9txZ3.css">
|
||||
<script type="module" crossorigin src="/assets/index-BvgUoEqO.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-DwQ38q3M.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
|
||||
@@ -146,11 +146,14 @@ function pickRover() {
|
||||
}
|
||||
|
||||
function describeAssignment(socketId) {
|
||||
const roverId = assignments.get(socketId) || null;
|
||||
const assignedRoverId = assignments.get(socketId) || null;
|
||||
const adminRoverId = assignedRoverId ? null : roverManager.getPrimaryRoverForSocket(socketId);
|
||||
const waitingIndex = waiting.has(socketId) ? Array.from(waiting).indexOf(socketId) : -1;
|
||||
const roverId = assignedRoverId || adminRoverId || null;
|
||||
const waitingStatus = waiting.has(socketId);
|
||||
return {
|
||||
roverId,
|
||||
status: roverId ? 'assigned' : waiting.has(socketId) ? 'waiting' : null,
|
||||
status: assignedRoverId ? 'assigned' : adminRoverId ? 'admin' : waitingStatus ? 'waiting' : null,
|
||||
queuePosition: waitingIndex >= 0 ? waitingIndex + 1 : null,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -115,6 +115,7 @@ function removeSocket(socket) {
|
||||
record.drivers.delete(socket.id);
|
||||
}
|
||||
turnService.driverRemoved(roverId, socket.id);
|
||||
managerEvents.emit('driver', { socketId: socket.id, roverId, action: 'remove' });
|
||||
}
|
||||
socketToRovers.delete(socket.id);
|
||||
disableSpectator(socket);
|
||||
@@ -147,6 +148,7 @@ function requestControl(roverId, socket, options = {}) {
|
||||
socket.join(record.room);
|
||||
turnService.driverAdded(roverId, socket.id, force && isAdmin(socket));
|
||||
socket.emit('controlGranted', { roverId });
|
||||
managerEvents.emit('driver', { socketId: socket.id, roverId, action: 'add' });
|
||||
sendAlert({
|
||||
color: COLORS.success,
|
||||
title: 'Control Granted',
|
||||
@@ -168,6 +170,7 @@ function releaseControl(roverId, socket) {
|
||||
}
|
||||
socket.leave(record.room);
|
||||
turnService.driverRemoved(roverId, socket.id);
|
||||
managerEvents.emit('driver', { socketId: socket.id, roverId, action: 'remove' });
|
||||
}
|
||||
|
||||
function isDriver(roverId, socket) {
|
||||
@@ -180,6 +183,24 @@ function canDrive(roverId, socket) {
|
||||
return turnService.canDrive(roverId, socket) || isAdmin(socket);
|
||||
}
|
||||
|
||||
function getRoversForSocket(socketId) {
|
||||
const joined = socketToRovers.get(socketId);
|
||||
if (!joined || joined.size === 0) {
|
||||
return [];
|
||||
}
|
||||
return Array.from(joined);
|
||||
}
|
||||
|
||||
function getPrimaryRoverForSocket(socketId) {
|
||||
const joined = socketToRovers.get(socketId);
|
||||
if (!joined || joined.size === 0) {
|
||||
return null;
|
||||
}
|
||||
const iterator = joined.values();
|
||||
const first = iterator.next();
|
||||
return first.done ? null : first.value;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
upsertRover,
|
||||
removeRover,
|
||||
@@ -196,6 +217,8 @@ module.exports = {
|
||||
disableSpectator,
|
||||
rovers,
|
||||
managerEvents,
|
||||
getRoversForSocket,
|
||||
getPrimaryRoverForSocket,
|
||||
};
|
||||
|
||||
roleEvents.on('change', ({ socket, role }) => {
|
||||
|
||||
@@ -64,6 +64,15 @@ managerEvents.on('lock', ({ roverId, locked }) => {
|
||||
syncAll();
|
||||
});
|
||||
|
||||
managerEvents.on('driver', ({ socketId }) => {
|
||||
if (!socketId) return;
|
||||
const socket = io.sockets.sockets.get(socketId);
|
||||
if (socket) {
|
||||
logger.info('Driver assignment change; syncing session', socketId);
|
||||
syncSocket(socket);
|
||||
}
|
||||
});
|
||||
|
||||
turnEvents.on('activeDriver', () => {
|
||||
logger.info('Active driver change; syncing all clients');
|
||||
syncAll();
|
||||
|
||||
Reference in New Issue
Block a user