graphe
Class ColorationJeton

java.lang.Object
  |
  +--java.lang.Thread
        |
        +--graphe.Sommet
              |
              +--graphe.ElectionJeton
                    |
                    +--graphe.ColorationJeton
All Implemented Interfaces:
java.lang.Runnable

public class ColorationJeton
extends ElectionJeton

Classe ColorationJeton. Cette classe permet de gérer une coloraiton du graphe de proche en proche, par circulation de jeton.

Version:
1.0
Author:
Estelle Colin, Thomas Peclier, Fabrice Berna @ IUP GMI
See Also:

Field Summary
private  boolean[] couleursLibres
          Tableau de taille le nombre de couleurs (nbCouleurs).
private  int[] couleursVoisins
          Tableau de taille le nombre de voisins (nbvoisins), permet d'associer chacun de mes voisins déjà colorié à sa couleur
private  int maCouleur
          numéro de la couleur que j'ai choisie, -1 sinon
private  boolean[] mesFilsColores
          Tableau de taille le nombre de voisins (nbvoisins), permet de savoir lesquels de mes fils sont coloriés, de manière à ne relancer la coloration que sur ces sommets et non sur mes voisins qui étaient colorés précédemment.
private  int nbCouleurs
          Nombre de couleurs de la coloration
private  int pere
          Identifiant de mon pere (celui qui m'a demandé de choisir une couleur)
 
Fields inherited from class graphe.ElectionJeton
chef, etat, initiateurId, message, strToken
 
Fields inherited from class graphe.Sommet
fin, id, nbSommet, nbvoisins, voisins, voisinsId
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
ColorationJeton(int i, int nb, boolean[] v, javax.swing.JTextArea out)
          Constructeur, Initialise couleursVoisins et mesFilsColores
 
Method Summary
private  void actualiserCouleurs(int k)
          Méthode d'actualisation des couleurs, Appelée lorsqu'un voisin nous envoie une deuxième fois sa couleur On réinitialise couleursLibres en repassant tout à vrai sauf les couleurs choisies par nos voisins non-fils (Autrement dit, les sommets coloriés avant moi dans le temps)
private  int choisirCouleur()
          Méthode de choix d'une couleur:
private  void diffuser(java.lang.String s, int c, int nb)
          Diffuse le message couleur, la couleur c et le nombre de couleur à mes voisins N'AYANT PAS ENCORE DE COULEUR
 void etat()
          affichage de l'état du sommet
private  int extraireVoisin()
          Retourne un voisin qui n'a pas encore de couleur
 int getCouleur()
          Accesseurs en lecture
private  void initialiserCouleurs(int k)
          Méthode de réinitialisation des couleurs Appelée lorsqu'un voisin se colore et nous communique sa couleur pour la première fois.
 void initierColoration()
          Méthode de déclenchement de la coloration, appelée par le chef élu Ce sommet va choisir une couleur, la communiquer à ses voisins, demander à un de ses voisins de se colorer
 void interprete(java.lang.String s, int i)
          Méthode d'interprétation des messages reçus
private  boolean lancerColorationAFils()
          Permet de demander à un fils de lancer la coloration sur son sous-arbre
 void setNbCouleurs(int k)
          Setter nbCouleurs
private  void sur_Reception_Coloration(int j)
          Appelée à la reception d'un message demandant de se colorer -> A la première réception de ce message, on enregistre l'id de son père -> Lorsque l'on est voisin avec un de nos aïeuls, il va nous envoyer ce message.
private  void sur_Reception_Couleur(int c, int n, int j)
          Appelée à la reception de la couleur c d'un voisin j.
private  void sur_Reception_Erreur(int j)
          Appelée à réception d'un message d'erreur d'un de ses fils J'annule les couleurs de mes fils déjà colorés Je choisis une couleur si j'ai trouvé une couleur je diffuse cette couleur à mes fils je demande à de mes fils de se colorer par lancerColorationAFils sinon c'est que je n'ai plus de couleur disponible j'envoie erreur à mon père si je suis mon propre père (c'est que je suis l'initiateur de la coloration): la coloration a échoué
private  void sur_Reception_Ok(int c, int j)
          Appelée à la reception de Ok On enregistre la couleur de son fils On enregistre que ce fils a réussi à se colorer dans mesFilsColores On demande à un autre fils de se colorer par appel de lancerColorationAFils Si on a plus de fils on envoie Ok à son père si je suis mon propre père (c'est que je suis l'initiateur de la coloration): la coloration a réussie
 
Methods inherited from class graphe.ElectionJeton
candidature, sur_reception_conf, sur_reception_de, sur_reception_req
 
Methods inherited from class graphe.Sommet
cancel, ecrit, getDuree, getEcrivain, getLecteur, getNbMess, getNbMessCouleur, initTubes, lit, println, run
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getContextClassLoader, getName, getPriority, getThreadGroup, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setName, setPriority, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

nbCouleurs

private int nbCouleurs
Nombre de couleurs de la coloration


maCouleur

private int maCouleur
numéro de la couleur que j'ai choisie, -1 sinon


couleursLibres

private boolean[] couleursLibres
Tableau de taille le nombre de couleurs (nbCouleurs). Permet de connaître les couleurs occupées par mes voisins déjà coloriés ainsi que les couleurs que j'ai déjà tentées d'utiliser, sans succès


couleursVoisins

private int[] couleursVoisins
Tableau de taille le nombre de voisins (nbvoisins), permet d'associer chacun de mes voisins déjà colorié à sa couleur


mesFilsColores

private boolean[] mesFilsColores
Tableau de taille le nombre de voisins (nbvoisins), permet de savoir lesquels de mes fils sont coloriés, de manière à ne relancer la coloration que sur ces sommets et non sur mes voisins qui étaient colorés précédemment. Dans ce tableaux on ne voit que les voisins qui dépendent de moi pour la coloration.


pere

private int pere
Identifiant de mon pere (celui qui m'a demandé de choisir une couleur)

Constructor Detail

ColorationJeton

public ColorationJeton(int i,
                       int nb,
                       boolean[] v,
                       javax.swing.JTextArea out)
Constructeur, Initialise couleursVoisins et mesFilsColores

Method Detail

getCouleur

public final int getCouleur()
Accesseurs en lecture

Returns:
int

setNbCouleurs

public void setNbCouleurs(int k)
Setter nbCouleurs


initierColoration

public final void initierColoration()
                             throws java.io.IOException
Méthode de déclenchement de la coloration, appelée par le chef élu Ce sommet va choisir une couleur, la communiquer à ses voisins, demander à un de ses voisins de se colorer

Specified by:
initierColoration in class ElectionJeton
Throws:
java.io.IOException

choisirCouleur

private final int choisirCouleur()
Méthode de choix d'une couleur:

Returns:
int,la couleur libre de plus petit indice, -1 s'il n'y en a plus

diffuser

private final void diffuser(java.lang.String s,
                            int c,
                            int nb)
                     throws java.io.IOException
Diffuse le message couleur, la couleur c et le nombre de couleur à mes voisins N'AYANT PAS ENCORE DE COULEUR

Throws:
java.io.IOException

initialiserCouleurs

private final void initialiserCouleurs(int k)
Méthode de réinitialisation des couleurs Appelée lorsqu'un voisin se colore et nous communique sa couleur pour la première fois.


actualiserCouleurs

private final void actualiserCouleurs(int k)
Méthode d'actualisation des couleurs, Appelée lorsqu'un voisin nous envoie une deuxième fois sa couleur On réinitialise couleursLibres en repassant tout à vrai sauf les couleurs choisies par nos voisins non-fils (Autrement dit, les sommets coloriés avant moi dans le temps)


lancerColorationAFils

private final boolean lancerColorationAFils()
                                     throws java.io.IOException
Permet de demander à un fils de lancer la coloration sur son sous-arbre

Returns:
boolean, si la demande a réussi
Throws:
java.io.IOException

extraireVoisin

private final int extraireVoisin()
Retourne un voisin qui n'a pas encore de couleur

Returns:
int, le voisin, ou -1 si on a plus de voisins

sur_Reception_Couleur

private final void sur_Reception_Couleur(int c,
                                         int n,
                                         int j)
Appelée à la reception de la couleur c d'un voisin j. A la première reception de ce message on appelle initialiserCouleurs. Si j nous a déjà envoyé une couleur, on appelle actualiserCouleurs Sinon on enregistre la couleur de j et on marque la couleur c comme indisponible.


sur_Reception_Coloration

private final void sur_Reception_Coloration(int j)
                                     throws java.io.IOException
Appelée à la reception d'un message demandant de se colorer -> A la première réception de ce message, on enregistre l'id de son père -> Lorsque l'on est voisin avec un de nos aïeuls, il va nous envoyer ce message. Dans ce cas c'est que la remontée de notre sous arbre aura réussie jusqu'à cet aïeul, celui-ci lançant la coloration sur un nouveau voisin. On peut donc lui renvoyer une confirmation de notre couleur -> Si ce message ne vient pas d'un aïeul, On choisit une couleur, s'il n'y en a plus aucune, on envoie Erreur à son père. On la communique à un de ses voisins, si on a plus de voisin on envoie Ok à son père. On demande à un de ses fils de se lancer

Throws:
java.io.IOException

sur_Reception_Ok

private final void sur_Reception_Ok(int c,
                                    int j)
                             throws java.io.IOException
Appelée à la reception de Ok On enregistre la couleur de son fils On enregistre que ce fils a réussi à se colorer dans mesFilsColores On demande à un autre fils de se colorer par appel de lancerColorationAFils Si on a plus de fils on envoie Ok à son père si je suis mon propre père (c'est que je suis l'initiateur de la coloration): la coloration a réussie

Throws:
java.io.IOException

sur_Reception_Erreur

private final void sur_Reception_Erreur(int j)
                                 throws java.io.IOException
Appelée à réception d'un message d'erreur d'un de ses fils J'annule les couleurs de mes fils déjà colorés Je choisis une couleur si j'ai trouvé une couleur je diffuse cette couleur à mes fils je demande à de mes fils de se colorer par lancerColorationAFils sinon c'est que je n'ai plus de couleur disponible j'envoie erreur à mon père si je suis mon propre père (c'est que je suis l'initiateur de la coloration): la coloration a échoué

Throws:
java.io.IOException

interprete

public final void interprete(java.lang.String s,
                             int i)
                      throws java.io.IOException
Méthode d'interprétation des messages reçus

Overrides:
interprete in class ElectionJeton
Throws:
java.io.IOException

etat

public final void etat()
affichage de l'état du sommet

Overrides:
etat in class ElectionJeton