/**
* Message contenant des informations ou des demandes sur l'air d'une
* pièce. S'il est de type "mesure", il contient alors la valeur de la
* température courante de l'air. S'il est de type "chauffer", il
* contient une demande de chauffage à effectuer.
*/
public class MessageTemperature implements java.io.Serializable {
/**
* Constante précisant que le message est de type "mesure"
* (contient la température courante de l'air)
*/
public final static byte MESURE = 0;
/**
* Constante précisant que le message est de type "chauffer"
* (contient une demnande de chauffage de l'air)
*/
public final static byte CHAUFFER = 1;
/**
* Nom de la pièce
*/
protected String piece;
/**
* Pour un message de type "messure", contient la température
* courante de l'air. Pour un message de type "chauffer", contient
* la puissance du chauffage demandée (entre 0 et 5).
*/
protected int valeur;
/**
* Type du message, précisé par une des 2 constantes
* MESURE
ou CHAUFFER
*/
protected byte type;
/**
* Retourne la valeur stockée dans le message.
*/
public int getValeur()
{
return valeur;
}
/**
* Retourne le type du message (MESURE
ou
* CHAUFFER
)
*/
public int getType()
{
return type;
}
/**
* Retourne le nom de la pièce
*/
public String getPiece()
{
return piece;
}
/**
* Convertit le message en son équivalent en tableau de byte.
*/
public byte[] toBytes()
{
byte tab[] = new byte[piece.length()+5];
int val = valeur;
for (int i=0; i < 4; i++)
{
tab[i] = (byte) (val & 0x000000FF);
val = val >>> 8;
}
tab[4] = type;
byte tabPiece[] = piece.getBytes();
for (int i=0; i < piece.length(); i++)
tab[i+5] = tabPiece[i];
return tab;
}
/**
* Retourne un message à partir de son équivalent en tableau de byte.
* @param tab le tableau de byte contenant le message
* @param length le nombre de cases à considérer dans le tableau
* @return une instance de message initialisée avec le contenu du
* tableau
*/
public static MessageTemperature fromBytes(byte[] tab, int length)
{
int val[] = new int[4];
for (int i=0; i < 4; i++)
{
if (tab[i] < 0)
val[i] = (tab[i] + 256) << (i *8);
else
val[i] = tab[i] << (i *8);
}
int valeur = val[0] | val[1] | val[2] | val[3];
String piece = new String(tab, 5, length - 5);
return new MessageTemperature(valeur, tab[4], piece);
}
public String toString()
{
String msg = "type = ";
if (type == MessageTemperature.MESURE) msg += "mesure ";
else if (type == MessageTemperature.CHAUFFER) msg+="modifier ";
else msg +="inconnu ";
msg += ", valeur = "+valeur+", piece = "+piece;
return msg;
}
/**
* Crèe un nouveau message.
* @param valeur le niveau de température ou la puissance du chauffage
* @param type le type du message (MESURE
ou CHAUFFER
)
* @param piece le nom de le pièce considérée
*/
public MessageTemperature(int valeur, byte type, String piece)
{
this.valeur = valeur;
this.type = type;
this.piece = piece;
}
}