Cet article décrit la manière dont sont persistées les données et leurs portées dans les différentes parties de SARAH.
Configuration: sur le disque
Le ConfigurationManager manipule un objet JSON pour organiser toute la configuration de SARAH. Cette configuration est toujours sauvegardée dans le fichier custom.prop. Au démarrage du serveur cet objet est construit à partir de:
script/wsrnode.propplugins/{plugin}/{plugin}.propcustom.prop
Attention ! si vous branchez de l’information dans cet objet, elle sera persisté lors de la prochaine sauvegarde.
Modules: en mémoire
Les modules ne sont chargés qu’une seule fois lors de l’appel de require('module'). Ils n’exposent que la fonction exports.action = function(data, callback, config, SARAH){ ... } ce qui veut dire:
- Les autres fonctions sont privées
- Le serveur doit redémarrer si le plugin est modifié.
- Le plugin est rechargé si il est édité depuis le web (v2.8).
- Il est possible de mémoriser des variables tant que le serveur est actif
[crayon]
// Fonction publique
exports.action = function(data, callback, config, SARAH){
ajoute(5);
callback({ tts : compteur });
}
// Fonction privée
var ajoute = function(indice){
compteur += indice;
}
// Variable privée
var compteur = 0;
[/crayon]
Les plugins sont donc cloisonnés.
Règles: dans le flux
Un plugin est appelé avec un objet JSON data et se termine via un objet JSON callback({}).
[crayon]
data => Plugin A => callback() => règle => data => Plugin B => callback() => …
[/crayon]
L’objet JSON data passé au Plugin B contient l’information des data et callback() précédents. Dans le « do » d’une règle il s’appel options.
Ainsi les plugins peuvent véhiculer de l’information dans le contexte d’un enchaînement de règle. Un peu comme les attributs d’une requête HTTP d’un serveur J2EE.
Contexte: partagé en mémoire
L’objet SARAH est un singleton transverse à toute l’API. Son usage est décrit dans un précédent article.
Par convention, les plugins peuvent enregistrer de l’information dans SARAH.context.
[crayon]
// Plugin A
exports.action = function(data, callback, config, SARAH){
SARAH.context.speaker = ‘Jean-Philippe’;
callback({});
}
// Plugin B
exports.action = function(data, callback, config, SARAH){
callback({‘tts’ : ‘Bonjour ‘ + SARAH.context.speaker});
}
[/crayon]
C’est une bonne pratique pour partager de l’information entre plugins.
Conclusion
Dans un plugin:
- Les propriétés se persistent sur disque
- Les variables se persistent en mémoire
- Le
SARAH.contextse partage entre plugins - Le
data/callback()se partage entre règles



Laisser un commentaire