Skip to content

Instantly share code, notes, and snippets.

@MaxLarue
Created July 9, 2022 15:43
Show Gist options
  • Save MaxLarue/bc119ac3b66fc63bcd97094d2eb2cfb7 to your computer and use it in GitHub Desktop.
Save MaxLarue/bc119ac3b66fc63bcd97094d2eb2cfb7 to your computer and use it in GitHub Desktop.
event service
export type EventType = string;
export interface Event {
type: EventType;
}
export interface EventPublisher {
publish<T extends Event>(event: Event): Promise<void>
}
export type EventHandler = (event: Event) => Promise<void>
export interface EventSubscribeService {
subscribe(eventType: EventType, handler: EventHandler)
}
export class EventService implements EventPublisher, EventSubscribeService {
private multiMap<EventType, EventHandler> = new MultiMap()
async publish<T extends Event>(event: Event) {
for (const handler of this.multiMap) {
handler(event)
}
}
subscribe(eventType: EventType, handler: EventHandler) {
this.multiMap.add(eventType, handler)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment