minesweeper/backend/events.ts

40 lines
787 B
TypeScript

import type { ClientGame } from "../shared/game";
export type EventType = "new" | "finished" | "updateGame" | "updateStage";
type Events =
| {
type: "new";
user: string;
}
| {
type: "loss";
user: string;
stage: number;
}
| {
type: "updateGame";
game: string;
data: ClientGame;
}
| {
type: "updateStage";
game: string;
stage: number;
started: number;
};
const listeners = new Set<(event: Events) => void>();
export const on = (listener: (event: Events) => void) => {
listeners.add(listener);
};
export const off = (listener: (event: Events) => void) => {
listeners.delete(listener);
};
export const emit = (event: Events) => {
listeners.forEach((listener) => listener(event));
};