Spaces:
Sleeping
Sleeping
File size: 1,148 Bytes
90cbf22 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import { useMutation, useQuery } from 'convex/react';
import { useEffect } from 'react';
import { api } from '../../convex/_generated/api';
import { WORLD_HEARTBEAT_INTERVAL } from '../../convex/constants';
export function useWorldHeartbeat() {
const worldStatus = useQuery(api.world.defaultWorldStatus);
const worldId = worldStatus?.worldId;
// Send a periodic heartbeat to our world to keep it alive.
const heartbeat = useMutation(api.world.heartbeatWorld);
useEffect(() => {
const sendHeartBeat = () => {
if (!worldStatus) {
return;
}
// Don't send a heartbeat if we've observed one sufficiently close
// to the present.
if (Date.now() - WORLD_HEARTBEAT_INTERVAL / 2 < worldStatus.lastViewed) {
return;
}
void heartbeat({ worldId: worldStatus.worldId });
};
sendHeartBeat();
const id = setInterval(sendHeartBeat, WORLD_HEARTBEAT_INTERVAL);
return () => clearInterval(id);
// Rerun if the `worldId` changes but not `worldStatus`, since don't want to
// resend the heartbeat whenever its last viewed timestamp changes.
}, [worldId, heartbeat]);
}
|