mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-17 10:00:46 -04:00
private rover request fixes finally
This commit is contained in:
@@ -64,6 +64,10 @@ function applySocketGrantCache(socket) {
|
||||
socket.data.privateClosedAccessRovers = listGrantedRoversForRequester(requesterKey);
|
||||
}
|
||||
|
||||
function refreshAllSocketGrantCaches() {
|
||||
io.sockets.sockets.forEach((socket) => applySocketGrantCache(socket));
|
||||
}
|
||||
|
||||
function getGrantForRequester(requesterKey, roverId) {
|
||||
if (!requesterKey || !roverId) return null;
|
||||
return grants.get(buildGrantKey(requesterKey, roverId)) || null;
|
||||
@@ -139,12 +143,19 @@ function tryAssignClosedPrivateRover(socket, roverId) {
|
||||
if (!socket || !roverId) return false;
|
||||
const record = roverManager.rovers.get(String(roverId));
|
||||
if (!record) return false;
|
||||
const access = roverManager.canRequestControl(roverId, socket, { allowUser: true });
|
||||
const access = roverManager.canRequestControl(roverId, socket, {
|
||||
allowUser: true,
|
||||
allowClosedPrivateGrantInLockdown: true,
|
||||
});
|
||||
if (!access.ok) {
|
||||
throw new Error(access.reason || 'Control denied');
|
||||
}
|
||||
const previousJoined = roverManager.getRoversForSocket(socket.id);
|
||||
roverManager.requestControl(roverId, socket, { allowUser: true });
|
||||
roverManager.requestControl(roverId, socket, {
|
||||
allowUser: true,
|
||||
allowClosedPrivateGrantInLockdown: true,
|
||||
forceTurn: true,
|
||||
});
|
||||
previousJoined.forEach((rid) => {
|
||||
if (rid !== roverId) roverManager.releaseControl(rid, socket);
|
||||
});
|
||||
@@ -156,6 +167,7 @@ function tryAssignClosedPrivateRover(socket, roverId) {
|
||||
logger.warn('Failed to move assignment after private access grant', { socketId: socket.id, error: err.message });
|
||||
}
|
||||
socket.emit('controlGranted', { roverId: String(roverId) });
|
||||
roverManager.broadcastRoster();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -304,5 +316,6 @@ module.exports = {
|
||||
approveRequest,
|
||||
denyRequest,
|
||||
applySocketGrantCache,
|
||||
refreshAllSocketGrantCaches,
|
||||
clearPendingForRover,
|
||||
};
|
||||
|
||||
@@ -6,7 +6,7 @@ const roverManager = require('../roverManager');
|
||||
const { requestEvents, grants } = require('./state');
|
||||
|
||||
function registerPrivateRoverAccessHooks(deps) {
|
||||
const { applySocketGrantCache, createRequest, clearPendingForRover } = deps;
|
||||
const { applySocketGrantCache, refreshAllSocketGrantCaches, createRequest, clearPendingForRover } = deps;
|
||||
|
||||
roverManager.managerEvents.on('private', ({ roverId, open } = {}) => {
|
||||
if (!roverId) return;
|
||||
@@ -17,6 +17,8 @@ function registerPrivateRoverAccessHooks(deps) {
|
||||
grants.delete(key);
|
||||
}
|
||||
}
|
||||
refreshAllSocketGrantCaches();
|
||||
roverManager.broadcastRoster();
|
||||
}
|
||||
requestEvents.emit('change', { reason: 'private_state', roverId: String(roverId), open: Boolean(open) });
|
||||
});
|
||||
@@ -30,6 +32,8 @@ function registerPrivateRoverAccessHooks(deps) {
|
||||
grants.delete(key);
|
||||
}
|
||||
}
|
||||
refreshAllSocketGrantCaches();
|
||||
roverManager.broadcastRoster();
|
||||
}
|
||||
requestEvents.emit('change', { reason: 'rover', roverId: String(roverId), action: action || null });
|
||||
});
|
||||
|
||||
@@ -11,12 +11,14 @@ const {
|
||||
approveRequest,
|
||||
denyRequest,
|
||||
applySocketGrantCache,
|
||||
refreshAllSocketGrantCaches,
|
||||
clearPendingForRover,
|
||||
} = require('./core');
|
||||
const { registerPrivateRoverAccessHooks } = require('./hooks');
|
||||
|
||||
registerPrivateRoverAccessHooks({
|
||||
applySocketGrantCache,
|
||||
refreshAllSocketGrantCaches,
|
||||
createRequest,
|
||||
clearPendingForRover,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user