mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
the dreaded control gate...
This commit is contained in:
@@ -158,7 +158,7 @@ function maybeSpeak(socket, message, ttsOptions) {
|
|||||||
const audio = record?.meta?.audio || {};
|
const audio = record?.meta?.audio || {};
|
||||||
const ttsEnabled = Boolean(audio.ttsEnabled);
|
const ttsEnabled = Boolean(audio.ttsEnabled);
|
||||||
if (!ttsEnabled) return;
|
if (!ttsEnabled) return;
|
||||||
// if (!roverManager.canDrive(message.roverId, socket)) return;
|
if (!roverManager.canDrive(message.roverId, socket)) return;
|
||||||
try {
|
try {
|
||||||
issueCommand(message.roverId, {
|
issueCommand(message.roverId, {
|
||||||
type: 'tts',
|
type: 'tts',
|
||||||
|
|||||||
@@ -476,7 +476,13 @@ function isDriver(roverId, socket) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function canDrive(roverId, socket) {
|
function canDrive(roverId, socket) {
|
||||||
return turnService.canDrive(roverId, socket) || isAdmin(socket);
|
if (isAdmin(socket)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!socket || !isDriver(roverId, socket)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return turnService.canDrive(roverId, socket);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getRoversForSocket(socketId) {
|
function getRoversForSocket(socketId) {
|
||||||
@@ -571,6 +577,9 @@ io.on('connection', (socket) => {
|
|||||||
if (socket.data?.role === 'spectator') {
|
if (socket.data?.role === 'spectator') {
|
||||||
throw new Error('Spectators cannot drive');
|
throw new Error('Spectators cannot drive');
|
||||||
}
|
}
|
||||||
|
if ((getMode() === MODES.ADMIN || getMode() === MODES.LOCKDOWN) && !isAdmin(socket)) {
|
||||||
|
throw new Error('Admins only');
|
||||||
|
}
|
||||||
const targetId = roverId || Array.from(rovers.keys())[0];
|
const targetId = roverId || Array.from(rovers.keys())[0];
|
||||||
if (!targetId) {
|
if (!targetId) {
|
||||||
throw new Error('No rovers available');
|
throw new Error('No rovers available');
|
||||||
@@ -582,8 +591,9 @@ io.on('connection', (socket) => {
|
|||||||
throw new Error(message || 'Switch denied');
|
throw new Error(message || 'Switch denied');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.info('Request control', socket.id, targetId, { force });
|
const forceAllowed = Boolean(force) && isAdmin(socket);
|
||||||
requestControl(targetId, socket, { force: Boolean(force), allowUser: true });
|
logger.info('Request control', socket.id, targetId, { force: forceAllowed });
|
||||||
|
requestControl(targetId, socket, { force: forceAllowed, allowUser: true });
|
||||||
previousJoined.forEach((rid) => {
|
previousJoined.forEach((rid) => {
|
||||||
if (rid !== targetId) {
|
if (rid !== targetId) {
|
||||||
releaseControl(rid, socket);
|
releaseControl(rid, socket);
|
||||||
|
|||||||
Reference in New Issue
Block a user