import { Observable } from "@noya-app/observable"; import { ClientToServerMessage, MultiplayerStateManagerError, ServerToClientMessage, } from "./multiplayer"; import { ReconnectingWebSocketState } from "./ReconnectingWebsocket"; export type ConnectionEvent = | { type: "stateChange"; state: ReconnectingWebSocketState; } | { type: "send"; message: ClientToServerMessage; } | { type: "receive"; message: ServerToClientMessage; } | { type: "error"; error: MultiplayerStateManagerError; }; export class ConnectionEventManager { constructor(public options: { maxEvents?: number } = {}) {} events$ = new Observable[]>([]); addEvent(event: ConnectionEvent) { const existing = this.events$.get(); const merged = [...existing, event]; const maxEvents = this.options.maxEvents ?? 50; this.events$.set(merged.slice(-maxEvents)); // Take last maxEvents items } getEvents() { return this.events$.get(); } }