handlersRegistry.ts 886 B

1234567891011121314151617181920212223242526272829
  1. import type { MessageType } from "../enums.ts";
  2. import type { IClient } from "../models/client.ts";
  3. import type { IMessage } from "../models/message.ts";
  4. import type { Handler } from "./handler.ts";
  5. export interface IHandlersRegistry {
  6. registerHandler(messageType: MessageType, handler: Handler): void;
  7. handle(client: IClient | undefined, message: IMessage): boolean;
  8. }
  9. export class HandlersRegistry implements IHandlersRegistry {
  10. private readonly handlers = new Map<MessageType, Handler>();
  11. public registerHandler(messageType: MessageType, handler: Handler): void {
  12. if (this.handlers.has(messageType)) return;
  13. this.handlers.set(messageType, handler);
  14. }
  15. public handle(client: IClient | undefined, message: IMessage): boolean {
  16. const { type } = message;
  17. const handler = this.handlers.get(type);
  18. if (!handler) return false;
  19. return handler(client, message);
  20. }
  21. }