import { t } from "./base" import { playerRouter } from "./player" import { crewRouter } from "./crew" import { game } from "../game" import { on } from "node:events" import type { PlayerBroadcast } from "../../shared/broadcast" export const appRouter = t.router({ player: playerRouter, crew: crewRouter, join: t.procedure .subscription(async function*({ signal, ctx }) { signal!.addEventListener("abort", () => { game.removePlayer(ctx.sessionId) }) const iterable = on(game.eventBus, "player-broadcast", { signal }) for (const broadcast of game.getConnectionPlayerBroadcasts()) { yield broadcast } for await (const broadcasts of iterable) { for (const broadcast of broadcasts) { yield broadcast as unknown as PlayerBroadcast } } }), }) export type AppRouter = typeof appRouter