A social knowledge tool for researchers built on ATProto
at development 1.1 kB view raw
1import { 2 IEventSubscriber, 3 IEventHandler, 4} from '../../application/events/IEventSubscriber'; 5import { IDomainEvent } from '../../domain/events/IDomainEvent'; 6import { InMemoryEventPublisher } from './InMemoryEventPublisher'; 7import { EventName } from './EventConfig'; 8 9export class InMemoryEventSubscriber implements IEventSubscriber { 10 private handlers: Map<EventName, IEventHandler<any>> = new Map(); 11 private isStarted = false; 12 13 async subscribe<T extends IDomainEvent>( 14 eventType: EventName, 15 handler: IEventHandler<T>, 16 ): Promise<void> { 17 this.handlers.set(eventType, handler); 18 19 // Register with the static publisher 20 InMemoryEventPublisher.addSubscriber( 21 eventType, 22 async (event: IDomainEvent) => { 23 const result = await handler.handle(event as T); 24 if (result.isErr()) { 25 throw result.error; 26 } 27 }, 28 ); 29 } 30 31 async start(): Promise<void> { 32 this.isStarted = true; 33 console.log('InMemoryEventSubscriber started'); 34 } 35 36 async stop(): Promise<void> { 37 this.isStarted = false; 38 console.log('InMemoryEventSubscriber stopped'); 39 } 40}