29 lines
No EOL
938 B
TypeScript
29 lines
No EOL
938 B
TypeScript
import { t } from "./base"
|
|
import { playerRouter } from "./player"
|
|
import { observable } from "@trpc/server/observable"
|
|
import type { GameEvent } from "../../shared/gameEvents"
|
|
import { directorRouter } from "./director"
|
|
import { game } from "../game"
|
|
|
|
export const appRouter = t.router({
|
|
player: playerRouter,
|
|
director: directorRouter,
|
|
|
|
join: t.procedure
|
|
.subscription(({ ctx }) => {
|
|
return observable<GameEvent>(emit => {
|
|
const handleGameEvent = (event: GameEvent) => emit.next(event)
|
|
const handleDestroyed = () => setTimeout(() => emit.complete(), 500)
|
|
|
|
game.on("game-event", handleGameEvent)
|
|
|
|
game.getInitialStateEvents().forEach(event => emit.next(event))
|
|
|
|
return () => {
|
|
game.off("game-event", handleGameEvent)
|
|
}
|
|
})
|
|
}),
|
|
})
|
|
|
|
export type AppRouter = typeof appRouter |