UNPKG

shoehive

Version:

WebSocket-based multiplayer game framework for real-time, event-driven gameplay

99 lines (98 loc) 3.23 kB
import { EventType } from './EventTypes'; /** * EventBus * * A wrapper around Node.js EventEmitter that provides a central event bus * for the entire application. This class is responsible for dispatching events * and registering event handlers. * * Event naming convention: * Events follow a namespaced pattern with colon separators: "domain:action" * For example: "player:connected", "table:player:joined", etc. * * Use the EventTypes constants to ensure consistent event naming across the application. * * External Usage: * Developers can extend the EventBus with their own custom events: * * ```typescript * // Define your custom events * const MY_EVENTS = { * CUSTOM_ACTION: "myGame:customAction" * } as const; * * // Use the predefined event constants in your code * eventBus.on(MY_EVENTS.CUSTOM_ACTION, (data) => { * console.log(`Custom action received: ${data}`); * }); * * // You can also use string literals, but you lose type safety * eventBus.on("myGame:anotherAction", (data) => { * console.log(`Another action received: ${data}`); * }); * ``` */ export declare class EventBus { private emitter; private debugEnabled; private debugFilter?; private debugLogger; private originalEmit; constructor(); /** * Register an event listener * @param event The event to listen for * @param listener The callback function to execute when the event occurs */ on<T = unknown>({ event, listener, }: { event: EventType | string; listener: (payload: T) => void; }): void; /** * Register a one-time event listener * @param event The event to listen for * @param listener The callback function to execute when the event occurs */ once<T = unknown>({ event, listener, }: { event: EventType | string; listener: (payload: T) => void; }): void; /** * Remove an event listener * @param event The event to stop listening for * @param listener The callback function to remove */ off<T = unknown>({ event, listener, }: { event: EventType | string; listener: (payload: T) => void; }): void; /** * Emit an event * @param event The event to emit * @param args Arguments to pass to event listeners * @returns Whether the event had listeners */ emit(event: EventType | string, payload?: unknown): boolean; /** * Get the number of listeners for an event * @param event The event to check * @returns The number of listeners for the event */ listenerCount({ event }: { event: EventType | string; }): number; /** * Debug monitor for all events * Logs all events and their payloads to the console * Useful during development or debugging * * @param enabled Whether to enable debug monitoring * @param filter Optional filter function to only log certain events * @param logger Custom logger function (defaults to console.log) */ debugMonitor({ enabled, filter, logger, }?: { enabled?: boolean; filter?: (event: string) => boolean; logger?: (event: string, ...args: unknown[]) => void; }): void; }