28 lines
1.1 KiB
JavaScript
28 lines
1.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.gameRouter = void 0;
|
|
const events_1 = require("events");
|
|
const trpc_1 = require("../trpc");
|
|
const GameState_1 = require("types/GameState");
|
|
const observable_1 = require("@trpc/server/observable");
|
|
const gameStateStore_1 = require("server/gameStateStore");
|
|
class GameEventEmitter extends events_1.EventEmitter {
|
|
}
|
|
const gameEventEmitter = new GameEventEmitter();
|
|
exports.gameRouter = (0, trpc_1.router)({
|
|
update: trpc_1.publicProcedure.input(GameState_1.gameStateSchema).mutation(({ input }) => {
|
|
(0, gameStateStore_1.setGameState)(input);
|
|
gameEventEmitter.emit('update', input);
|
|
}),
|
|
get: trpc_1.publicProcedure.query(() => {
|
|
return (0, gameStateStore_1.getGameState)();
|
|
}),
|
|
onUpdate: trpc_1.publicProcedure.subscription(() => {
|
|
return (0, observable_1.observable)((emit) => {
|
|
const onUpdate = (state) => emit.next(state);
|
|
gameEventEmitter.on('update', onUpdate);
|
|
return () => gameEventEmitter.off('update', onUpdate);
|
|
});
|
|
}),
|
|
});
|