Utilisation du Médiateur
Toutes les reqûetes et notifications spécifiques à un service particulier sont listés dans les sous-chapitres des services correspondants.
Requêtes
Les requêtes permettent d'exécuter des tâches sur les services.
La plupart n'ont pas de retour, mais certaines peuvent retourner une promesse.
Mediator.prototype.Request<T, Y>(Request: new(...args: any[]):T): Y Requêtes simples
La majorité des reqûetes simples ne contiennent pas de retour.
Ici MyFunction demande l'ajoute d'une tâche RunTia au système de tâches.
import {inject } from "inversify";import "reflect-metadata";import {Mediator } from "@adclz/fevermainlib/kernel"import {RunTia } from "@adclz/fevermainlib/services/socket" export default class MyClass { private readonly Mediator : Mediator constructor(@inject (Mediator ) Mediator : Mediator ) { this.Mediator = Mediator } public MyFunction () { this.Mediator .Request (new RunTia ()) }}
Requêtes asynchrones
Les reqûetes asynchrones possèdent un retour de type Promise.
C'est notamment le cas avec toutes les reqûetes qui utilisent le service RestApi.
Vous pouvez gérer ces reqûetes soit en utilisant la méthode then(), catch() ou finally() de Promise, soit en utilisant async / await.
Ici la requête GetCultures permet de retourner les cultures du projet (si projet chargé).
GetCultures retourne un objet de type Culture, vous n'avez pas besoin d'utiliser la méthode x.json(). import {inject } from "inversify";import "reflect-metadata";import {Mediator } from "@adclz/fevermainlib/kernel"import {GetCultures } from "@adclz/fevermainlib/services/rest" export default class MyClass { private readonly Mediator : Mediator constructor(@inject (Mediator ) Mediator : Mediator ) { this.Mediator = Mediator } // Promise public PromiseMyFunction () { this.Mediator .Request (new GetCultures ()) .then (data => {}) .catch (err => err ) } // async / await public async AsyncMyFunction () { const data = await this.Mediator .Request (new GetCultures ()) }}
Notifications
Les notifications permettent de souscrire ou de publier des évènements.
🧪 Méthodes
Subscribe
S'abonne à une notification.
Mediator.prototype.Notification<T, Y>(Notification: Y).Subscribe() = (key: string, notification: (Notification: Y => void)) Vous devez fournir une clé qui correspondra à l'identifiant d'inscription à votre notification.
le second paramètre est un callback qui sera exécuté automatiquement lorsque la notification sera appellée.
Publish
Mediator.prototype.Notification<T, Y>(Notification: Y).Publish() = (Notification: Y)Permet de publier une notification qui va appeller l'ensemble des abonnés enregistrés sur cette notification.
MainLib. Privilégier
Publish sur vos propres notifications si vous prévoyez d'étendre le kernel.Unsubscribe
Mediator.prototype.Notification<T, Y>(Notification: Y).Unsubscribe() = (key: string)Permet de se désabonner d'une notification.
Exemple
Exemple d'utilisation avec la notification OnNewLog du service LogService.
import {inject } from "inversify";import "reflect-metadata";import {Mediator } from "@adclz/fevermainlib/kernel";import {OnNewLog , Log , LogType } from "@adclz/fevermainlib/services/log"; const NotitificationHandler = (data : Log ) => { console .log (data )} export default class MyClass { private readonly Mediator : Mediator constructor(@inject (Mediator ) Mediator : Mediator ) { this.Mediator = Mediator } public MyFunction () { // Subscribe this.Mediator .Notification (OnNewLog ).Subscribe ("SubscriberId", NotitificationHandler ) // Publish this.Mediator .Notification (OnNewLog ).Publish ({Type : LogType .Success , Message : "Log sent"}) // Unsubscribe this.Mediator .Notification (OnNewLog ).Unsubscribe ("SubscriberId") }}