rover sapshot

This commit is contained in:
legop3
2026-04-29 14:09:19 -04:00
parent 5ebf5fa580
commit 9b80b0d248
3 changed files with 26 additions and 39 deletions
@@ -20,7 +20,12 @@ function passesMode(socket) {
return true;
}
function registerRoverSnapshotSocketGateway({ roverManager, roverSnapshotEvents, getRoverSnapshotState }) {
function registerRoverSnapshotSocketGateway({
roverManager,
roverSnapshotEvents,
getRoverSnapshotState,
fetchSnapshotNow,
}) {
const roverSubscribers = new Map();
const socketSubscriptions = new Map();
const subscribeBuckets = new Map();
@@ -113,8 +118,19 @@ function registerRoverSnapshotSocketGateway({ roverManager, roverSnapshotEvents,
if (!passesMode(socket)) throw new Error('Not authorized for rover snapshots');
const rosterIds = new Set(visibleIds);
const validIds = uniqueIds.filter((id) => rosterIds.has(String(id)));
logger.info('Rover snapshot subscribe', {
socketId: socket.id,
requestedIds: uniqueIds,
visibleIds,
subscribedIds: validIds,
});
validIds.forEach((roverId) => addSubscription(socket, roverId));
validIds.forEach((roverId) => {
if (typeof fetchSnapshotNow === 'function') {
fetchSnapshotNow(String(roverId)).catch((err) => {
logger.warn('Immediate snapshot fetch failed', { roverId, err: err.message });
});
}
const state = getRoverSnapshotState(roverId);
if (state?.frame) sendFrame(socket, roverId, { ts: state.ts }, state.frame);
sendStatus(socket, roverId, { ts: state?.ts || null, error: state?.error || null });