Add world delta streaming and viewer smoothing
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import type { WorldSnapshot } from "./contracts";
|
||||
import type { WorldDelta, WorldSnapshot } from "./contracts";
|
||||
|
||||
export async function fetchWorldSnapshot(signal?: AbortSignal) {
|
||||
const response = await fetch("/api/world", { signal });
|
||||
@@ -8,6 +8,24 @@ export async function fetchWorldSnapshot(signal?: AbortSignal) {
|
||||
return response.json() as Promise<WorldSnapshot>;
|
||||
}
|
||||
|
||||
export function openWorldStream(
|
||||
afterSequence: number,
|
||||
handlers: {
|
||||
onDelta: (delta: WorldDelta) => void;
|
||||
onOpen?: () => void;
|
||||
onError?: () => void;
|
||||
},
|
||||
) {
|
||||
const stream = new EventSource(`/api/world/stream?afterSequence=${afterSequence}`);
|
||||
stream.addEventListener("open", () => handlers.onOpen?.());
|
||||
stream.addEventListener("error", () => handlers.onError?.());
|
||||
stream.addEventListener("world-delta", (event) => {
|
||||
const message = event as MessageEvent<string>;
|
||||
handlers.onDelta(JSON.parse(message.data) as WorldDelta);
|
||||
});
|
||||
return stream;
|
||||
}
|
||||
|
||||
export async function resetWorld() {
|
||||
const response = await fetch("/api/world/reset", {
|
||||
method: "POST",
|
||||
|
||||
Reference in New Issue
Block a user