level-up/backend/trpc/index.ts
2025-04-12 21:51:01 +02:00

32 lines
No EOL
979 B
TypeScript

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