Algorithme de broadcast (basique)

Principe général

Étant donné un réseau et un noeud source sélectionné, il est très facile d'effectuer une diffusion d'information dans le réseau. Le noeud source envoie un message à tous ses voisins. Puis l'algorithme est comme suit : si un noeud non-informé reçoit le message, il devient informé et envoie le message à son tour à ses voisins.

Implémentation

On définit une classe BroadcastNode qui hérite de Node, en surchargeant trois méthodes :

  1. L'initialisation souhaitée lorsqu'un noeud démarre, via la méthode onStart(),
  2. Le traitement à effectuer lorsque l'utilisateur sélectionne un noeud (pour le désigner comme source), via onSelection(). La sélection se fait à la souris (bouton du milieu ou bien Ctrl+clic gauche)
  3. Le traitement à effectuer lorsqu'un message arrive sur le noeud courant, via onMessage().

Le code correspondant est donné ci-dessous. Il est important de le comprendre entièrement avant de passer à la suite, car les autres algorithmes s'inspireront de celui-ci.

import io.jbotsim.core.Message;
import io.jbotsim.core.Color;
import io.jbotsim.core.Node;

public class BroadcastNode extends Node {

    @Override
    public void onStart() { // Initialisation par défaut
        setColor(Color.green); // Non informé
    }

    @Override
    public void onSelection() { // Noeud sélectionné
        setColor(Color.red); // Informé
        sendAll(new Message("Mon message"));
    }

    @Override
    public void onMessage(Message message) {
        if (getColor() == Color.green) { // Si non-informé
            setColor(Color.red); // Devient informé
            sendAll(new Message(message.getContent()));
        }
    }
}


Test : Cet algorithme peut être testé en utilisant la méthode main() suivante.

public static void main(String[] args) {
    Topology tp = new Topology();
    tp.setDefaultNodeModel(BroadcastNode.class);
    tp.setTimeUnit(500); // 1 ronde = 500ms
    new JViewer(tp);
    tp.start();
}