feat(events): Adds AcknowledgableEvent
This commit is contained in:
parent
6d7a0e7cfb
commit
b82ab7dbc4
18 changed files with 228 additions and 77 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue