mirror of
				https://gitlab.com/comunic/comunicapiv2
				synced 2025-10-31 01:24:43 +00:00 
			
		
		
		
	Create internal custom event manager
This commit is contained in:
		| @@ -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); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user