Architecture des agents SKUAD

La façon la plus simple d’implémenter un agent SKUAD est de procéder par héritage de la classe AgentUAdapter (package skuad.agentu.util). Le code ci-dessous vous donne une vue d’ensemble des méthodes qu’il faut surcharger en fonction des événements sur lesquels vous pouvez réagir. Notez qu’aucune méthode n’est obligatoire, vous pouvez donc vous limiter à n’écrire que celles qui vous sont nécessaires.

import skuad.agentu.*;
import skuad.agentu.util.*;

public class MonAgent extends AgentUAdapter {
  //Spécification des slots de l'agent
  public final static String physical_specif = "";   //définition des slots physiques
  public final static String social_specif = "";     //définition des slots sociaux

  //Cycle de vie de l'agent
  public void init(AgentUDescriptor aud){
    //invoquée à l'instanciation de la classe de l'agent (avant son démarrage via start())
  }    
  public void start(AgentUDescriptor aud, int ctx){
    //invoquée au démarrage de l'agent
  }
  public void stop(AgentUDescriptor aud, int ctx){
    //invoquée lors de la mise à l'arret de l'agent
  }
  public void event(AgentUDescriptor aud, int code, int ctx){
    //invoquée suite aux évènement PAUSE / RESUME / ALL_PLUGGED / MISSING_PLUG (valeur de code)
  }

  //Exécution du comportement de l'agent
  public void behavior(AgentUDescriptor aud, Pulse pulse){
     //invoquée quand un pulse active le comportement de l'agent
  }
  public void inoperablePulse(AgentUDescriptor aud, Pulse pulse){
     //invoquée quand un pulse active le comportement de l'agent mais que ce dernier n'est pas dans l'état IN_RUN
  }

  //Devices attachés à l'agent
  public void notifyPlugDevice(AgentUDescriptor aud, String slot, Device device){
    //invoquée quand un device vient d'être associé à l'un des slots de l'agent
  }
  public void notifyUnplugDevice(AgentUDescriptor aud, String slot){
    //invoquée quand un device vient d'être dissocié de l'un des slots de l'agent
  }
  public void notifyChangeDevice(AgentUDescriptor aud, String slot, Device device){
    //invoquée quand un device prend la place d'un autre sur l'un des slot de l'agent
  }
   
  //Ecoute des devices
  public void stateDevice(AgentUDescriptor aud, String slot, Device dev, boolean ready, boolean config_changed){
     //invoqué dès que se produit un changement d'état sur un device attaché à l'un des slots de l'agent
  }
  public void sensorReading(AgentUDescriptor aud, String read_label, Value value) {
     //invoqué en réponse à une demande de lecture préalablement réalisée sur un ou plusieurs devices
  }
  public void sensorChange(AgentUDescriptor aud, String slot, int sensor_id, Value value) {
    //invoquée dès qu'un capteur observable, d'un des devices attachés à l'agent, subit un changement de valeur
  }
   
  //Avatars associés à l'agent
  public void notifyPlugAvatar(AgentUDescriptor aud, String name, Avatar avatar, int contexte){
    //invoquée quand un avatar est affectée à l'un des slots de l'agent
  }
  public void beforeUnplugAvatar(AgentUDescriptor aud, String name, Avatar avatar, int contexte){
    //invoquée juste avant qu'un avatar soit dissocié de l'un des slots de l'agent
  }
  public void notifyUnplugAvatar(AgentUDescriptor aud, String name, int contexte){
    //invoquée juste après qu'un avatar soit dissocié de l'un des slots de l'agent
  }
  public void receive(AgentUDescriptor aud, Avatar avatar, MailBox box, Message mess){
    //invoquée dès qu'un message arrive dans la boite aux lettres de l'un des avatars associés à l'agent
  }
}

(… édition en cours …)