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 => {})
(parameter) data: RawCultureData
.catch(err => err)
}
 
// async / await
public async AsyncMyFunction() {
const data = await this.Mediator.Request(new GetCultures())
const data: RawCultureData
}
}
 

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.

Il n'est pas recommandé de publier sur les notifications déjà enregistrées par 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")
}
}