Un agent est un programme spécial qui tourne en boucle en continu sous le contrôle du gestionnaire de travaux. Il fournit une fonctionnalité similaire à un service Windows.
Le gestionnaire de travaux permet :
• de démarrer ou d'arrêter un agent (automatiquement ou manuellement).
• de redémarrer automatiquement un agent en cas de défaillance.
• de contrôler les agents à distance en mode batch ou par l'interface graphique.
Les agents sont implémentés par le chargement d'une DLL Adélia dans un processus spécifique (GSAGENT.EXE). Le fonctionnement est similaire au fonctionnement des travaux exécutés par des processus hôtes (GSHOST), excepté qu'il est possible de contrôler l'exécution de l'agent. La ligne de commande est identique à celle d'un travail.
Les agents communiquent avec le gestionnaire de travaux (interrogation, notification d'état) via une DLL d'extension de type toolbox ( GSAGENTDLL).
L'algorithme standard d'un agent sera une boucle infinie dans le cas général :
* boucle principale
CODE_RET_ATT = 1
TANT_QUE CODE_RET_ATT = 1
* faire ce que l'agent a à faire
...
* attente temporisée
APPELER_DLL 'GsAgentDll' 'GSATimedWait' NB_SECONDES CODE_RET_ATT
REFAIRE
* fin de l'agent
APPELER_DLL 'GsAgentDll' 'GSASetState' *BLANK CODE_RET
Lorsque le gestionnaire de travaux demande l'arrêt d'un agent, il positionne l'état de l'agent à 'S' (Arrêt demandé). Il est de la responsabilité du programme implémentant l'agent d'interroger régulièrement cet état via la fonction GSAGetState (ou par le code retour '2' de la fonction GSATimedWait), et de prendre les mesures nécessaires pour s'arrêter au plus vite lorsque le gestionnaire le demande.
Si une temporisation est spécifiée et que l'agent ne répond pas à la commande d'arrêt dans le temps demandé, un arrêt brutal ("Kill") est effectué à la fin du délai, sans que le programme de l'agent ne puisse s'y opposer. Cela doit être pris en compte si l'agent doit effectuer des traitements long et non interruptibles.
Lorsqu'il se termine, l'agent doit spécifier l'état d'arrêt à ' ', 'E' ou 'W' (Arrêté normalement, en erreur ou avec avertissement) à l'aide de la fonction GSASetState. A défaut, le gestionnaire de travaux mettra l'état à "Arrêté en erreur".