32 lines
No EOL
979 B
TypeScript
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 |