mirror of
https://gitlab.com/comunic/comunicapiv2
synced 2024-12-26 13:38:52 +00:00
Create internal custom event manager
This commit is contained in:
parent
4bfcb9b35b
commit
4901e9d3ef
@ -18,6 +18,7 @@ import { GroupsHelper } from "./GroupsHelper";
|
||||
import { NotificationsHelper } from "./NotificationsHelper";
|
||||
import { AccountImageHelper } from "./AccountImageHelper";
|
||||
import { BackgroundImageHelper } from "./BackgroundImageHelper";
|
||||
import { EventsHelper } from "./EventsHelper";
|
||||
|
||||
/**
|
||||
* Account helper
|
||||
@ -147,6 +148,13 @@ export class AccountHelper {
|
||||
* @param userID Target user ID
|
||||
*/
|
||||
public static async DestroyUserTokens(client: APIClient, userID: number) {
|
||||
|
||||
// Push the event
|
||||
EventsHelper.Emit("destroyed_login_tokens", {
|
||||
client: client,
|
||||
userID: userID
|
||||
});
|
||||
|
||||
return DatabaseHelper.DeleteRows(USERS_TOKENS_TABLE, {
|
||||
service_id: client.id,
|
||||
user_id: userID
|
||||
|
69
src/helpers/EventsHelper.ts
Normal file
69
src/helpers/EventsHelper.ts
Normal file
@ -0,0 +1,69 @@
|
||||
import { EventEmitter } from "events";
|
||||
import { APIClient } from "../entities/APIClient";
|
||||
|
||||
/**
|
||||
* Events manager
|
||||
*
|
||||
* @author Pierre Hubert
|
||||
*/
|
||||
|
||||
// When a user sign out
|
||||
export interface DestroyedLoginTokensEvent {
|
||||
userID: number,
|
||||
client: APIClient
|
||||
}
|
||||
|
||||
/**
|
||||
* Global map of all possible events
|
||||
*/
|
||||
export interface EventsMap {
|
||||
"destroyed_login_tokens": DestroyedLoginTokensEvent
|
||||
}
|
||||
|
||||
export class EventsHelper {
|
||||
|
||||
/**
|
||||
* The list of events
|
||||
*/
|
||||
private static EventsList: Map<keyof EventsMap, Array<(ev: any) => void | Promise<void>>> = new Map()
|
||||
|
||||
/**
|
||||
* Listen to a new event
|
||||
*
|
||||
* @param name The name of the event to listen to
|
||||
* @param listener Target listener
|
||||
*/
|
||||
public static Listen<K extends keyof EventsMap>(name: K, listener: (ev: EventsMap[K]) => void | Promise<void>) {
|
||||
if(!this.EventsList[<any>name])
|
||||
this.EventsList[<any>(name)] = [];
|
||||
|
||||
this.EventsList[<any>(name)].push(listener);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Push a new event
|
||||
*
|
||||
* Note : It is not mandatory to listen to this method, as
|
||||
* we will try / catch all the events
|
||||
*
|
||||
* @param name The name of the event
|
||||
* @param args Argumens to pass to the event
|
||||
*/
|
||||
public static async Emit<K extends keyof EventsMap>(name: K, args: EventsMap[K]) {
|
||||
|
||||
if(!this.EventsList[<any>name])
|
||||
return;
|
||||
|
||||
for(const entry of this.EventsList[<any>name]) {
|
||||
try {
|
||||
await entry(args);
|
||||
}
|
||||
catch(e) {
|
||||
console.error("An error occured while propagating an event ("+name+")!", e, args);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user