feat(events): Adds AcknowledgableEvent

This commit is contained in:
Michel Fedde 2025-06-22 15:51:14 +02:00
parent 6d7a0e7cfb
commit b82ab7dbc4
18 changed files with 228 additions and 77 deletions

View file

@ -1,33 +1,34 @@
import cron, {validate} from "node-cron";
import cron from "node-cron";
import {Class} from "../types/Class";
import {randomUUID} from "node:crypto";
import {Container} from "../Container/Container";
import {Logger} from "log4js";
export type EventConfiguration = {
name: string,
maxExecutions?: number,
}
export interface TimedEvent {
configuration: EventConfiguration,
cronExpression: string,
execute: () => void
}
import {BaseEvent, EventEntry, EventType, HandlerEvents, TimedEvent} from "./EventHandler.types";
export class EventHandler {
private eventHandlers: Map<string, Map<string, CallableFunction>> = new Map();
private static DEFAULT_EVENT_ENTRY: Omit<EventEntry, "method"> = {
persistent: false
}
private eventHandlers: Map<string, Map<string, EventEntry>> = new Map();
public get EventHandlers() {
return this.eventHandlers;
}
constructor() {
}
public addHandler<T extends Class>(eventName: string, handler: (event: T) => void): string {
public addHandler<T extends Class>(eventName: string, entry: EventEntry<T>): string {
if (!this.eventHandlers.has(eventName)) {
this.eventHandlers.set(eventName, new Map());
}
const id = randomUUID();
this.eventHandlers.get(eventName)?.set(id, handler);
this.eventHandlers.get(eventName)?.set(id, {
...EventHandler.DEFAULT_EVENT_ENTRY,
...entry
});
return id;
}
@ -44,7 +45,7 @@ export class EventHandler {
localEventHandlers.delete(id);
}
public dispatch<T extends Class>(event: T) {
public dispatch<T extends HandlerEvents>(event: T) {
const eventName = event.constructor.name;
if (!this.eventHandlers.has(eventName)) {
return;
@ -52,11 +53,21 @@ export class EventHandler {
this.eventHandlers.get(eventName)?.forEach((handler) => {
try {
handler(event);
handler.method(event);
} catch (e: any) {
Container.get<Logger>("logger").error(e);
}
})
if (event.type !== EventType.Acknowledge) {
return;
}
if (event.isAcknowledged()) {
return;
}
event.handleUnacknowledgement();
}
public addTimed(event: TimedEvent) {