mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 09:31:20 -04:00
replay capture ?
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
const EventEmitter = require('events');
|
||||
|
||||
const COOLDOWN_MS = 10 * 1000;
|
||||
|
||||
const events = new EventEmitter();
|
||||
let lastTriggeredAt = null;
|
||||
let lastTriggeredBy = null;
|
||||
|
||||
function getRemainingMs(now = Date.now()) {
|
||||
if (!lastTriggeredAt) return 0;
|
||||
const elapsed = now - lastTriggeredAt;
|
||||
return Math.max(0, COOLDOWN_MS - elapsed);
|
||||
}
|
||||
|
||||
function getState() {
|
||||
const remainingMs = getRemainingMs();
|
||||
return {
|
||||
cooldownMs: COOLDOWN_MS,
|
||||
lastTriggeredAt,
|
||||
lastTriggeredBy,
|
||||
remainingMs,
|
||||
available: remainingMs === 0,
|
||||
};
|
||||
}
|
||||
|
||||
function tryTrigger(by = null) {
|
||||
const remainingMs = getRemainingMs();
|
||||
if (remainingMs > 0) {
|
||||
return { ok: false, remainingMs, state: getState() };
|
||||
}
|
||||
lastTriggeredAt = Date.now();
|
||||
lastTriggeredBy = by || null;
|
||||
const state = getState();
|
||||
events.emit('update', { state, by: lastTriggeredBy });
|
||||
return { ok: true, state };
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
tryTriggerReplay: tryTrigger,
|
||||
getReplayState: getState,
|
||||
replayEvents: events,
|
||||
};
|
||||
Reference in New Issue
Block a user