1 package com.lasalle.meeting;
3 import android.os.Bundle;
4 import android.os.Handler;
5 import android.os.Message;
6 import android.util.Log;
8 import java.io.IOException;
9 import java.net.DatagramPacket;
10 import java.net.DatagramSocket;
11 import java.net.InetAddress;
12 import java.net.UnknownHostException;
13 import java.util.List;
14 import java.util.concurrent.LinkedBlockingQueue;
15 import java.util.concurrent.locks.ReentrantLock;
34 private static final String
TAG =
"_Communication";
41 private final static int PORT = 5000;
43 private final ReentrantLock
mutex =
new ReentrantLock();
44 private DatagramSocket
socket = null;
85 socket =
new DatagramSocket(PORT);
86 Log.d(TAG,
"Création de la socket UDP sur le port " + PORT);
93 queueEmission =
new LinkedBlockingQueue<DatagramPacket>();
102 socket =
new DatagramSocket();
103 Log.d(TAG,
"Création d'une socket UDP");
110 queueEmission =
new LinkedBlockingQueue<DatagramPacket>();
123 public void envoyer(String trame, String adressePortier)
125 if(socket == null || socket.isClosed())
128 Log.d(TAG,
"envoyer() : adressePortier = " + adressePortier);
130 final InetAddress adresseIPDistante;
133 adresseIPDistante = InetAddress.getByName(adressePortier);
135 catch (UnknownHostException e)
144 @Override
public void run()
146 byte[] emission =
new byte[1024];
150 emission = trame.getBytes();
151 DatagramPacket paquetRetour =
new DatagramPacket(emission, emission.length, adresseIPDistante, PORT);
152 socket.send(paquetRetour);
153 Log.d(TAG,
"envoyer() : " + trame +
" à " + adresseIPDistante +
":" + PORT);
155 catch (IOException e)
158 Log.d(TAG,
"Erreur émission !");
169 byte[] reception =
new byte[1024];
171 while (socket != null && !socket.isClosed())
175 final DatagramPacket paquetRecu =
new DatagramPacket(reception, reception.length);
176 socket.receive(paquetRecu);
177 final String donnees =
new String(paquetRecu.getData(), paquetRecu.getOffset(), paquetRecu.getLength());
178 Log.d(TAG,
"Réception [" + paquetRecu.getAddress().getHostAddress() +
":" + paquetRecu.getPort() +
"] -> " + donnees);
183 envoyerMessage(TYPE_RECEPTION, paquetRecu.getAddress().getHostAddress(), paquetRecu.getPort(), donnees);
189 Log.d(TAG,
"Erreur réception !");
193 Log.d(TAG,
"recevoir()");
203 Message msg = Message.obtain();
205 Bundle b =
new Bundle();
206 b.putString(
"adresseIP", adresse);
207 b.putInt(
"port", port);
208 b.putString(
"donnees", donnees);
211 handler.sendMessage(msg);
213 Log.d(TAG,
"envoyerMessage() -> handler.sendMessage()");
234 Log.d(TAG,
"fabriquerTrameDemande() type = " + typeTrame);
245 Log.d(TAG,
"fabriquerTrameDemande() : type de trame inconnu !");
248 Log.d(TAG,
"fabriquerTrameDemande() trame = " + trame);
275 if(parametres == null)
278 if(parametres.size() < 1)
281 Log.d(TAG,
"fabriquerTrameModification() type = " + typeTrame);
282 Log.d(TAG,
"fabriquerTrameModification() Nb parametres = " + parametres.size());
283 for(
int i=0;i<parametres.size();++i)
285 Log.d(TAG,
"fabriquerTrameModification() parametres[" + i +
"] = " + parametres.get(i));
295 trame = DELIMITEUR_EN_TETE +
"SET;1;" + parametres.get(CHAMP_NOM) + DELIMITEUR_CHAMP + parametres.get(CHAMP_DESCRIPTION) + DELIMITEUR_CHAMP + parametres.get(CHAMP_LIEU) + DELIMITEUR_CHAMP + parametres.get(CHAMP_SUPERFICIE) +
DELIMITEUR_FIN;
299 if(parametres.size() >= NB_CHAMPS_DISPONIBILITE && parametres.size() <= (NB_CHAMPS_DISPONIBILITE+1))
301 if (parametres.get(0).equals(
"0"))
302 trame = DELIMITEUR_EN_TETE +
"SET;3;" + parametres.get(0) +
DELIMITEUR_FIN;
304 trame = DELIMITEUR_EN_TETE +
"SET;3;" + parametres.get(0) +
";" + parametres.get(1) +
DELIMITEUR_FIN;
309 Log.d(TAG,
"fabriquerTrameModification() : type de trame inconnu !");
312 Log.d(TAG,
"fabriquerTrameModification() trame = " + trame);
323 Log.d(TAG,
"verifierTrame() " + (trame.startsWith(DELIMITEUR_EN_TETE) && trame.endsWith(DELIMITEUR_FIN)));
325 return (trame.startsWith(DELIMITEUR_EN_TETE) && trame.endsWith(DELIMITEUR_FIN));
344 Log.d(TAG,
"Démarre le thread réception");
357 switch(champs.length)
360 Log.d(TAG,
"handleMessage() Trame DEMANDE_INFORMATIONS");
364 Log.d(TAG,
"handleMessage() Trame DEMANDE_DISPONIBILITE");
368 Log.d(TAG,
"handleMessage() Trame MODIFICATION_DISPONIBILITE");
static final int NB_CHAMPS_DISPONIBILITE_CODE
Communication entre l'application et le portier.
static final int CHAMP_DISPONIBILITE
String fabriquerTrameDemande(int typeTrame)
Fabrique la trame de demande.
static final int CHAMP_LIEU
static final int MODIFICATION_INFORMATIONS
InetAddress adresseIP
Adresse IP du portier.
Communication(Handler handler)
Constructeur par défaut de la classe Communication.
static final String DELIMITEUR_FIN
static final int NB_CHAMPS_INFORMATIONS
void envoyerMessage(int type, String adresse, int port, String donnees)
Envoie un message.
static int recupererTypeTrame(String[] champs)
Détermine le type de trame.
static final int NB_CHAMPS_DEMANDE_INFORMATIONS
static final int CHAMP_DESCRIPTION
static final int TRAME_INCONNUE
static final int MODIFICATION_DISPONIBILITE
static final int DEMANDE_INFORMATIONS
void run()
Assure la réception des trames.
static final int CHAMP_SUPERFICIE
static final int PORT
Port d'écoute des portiers.
void arreter()
Arrête la socket, donc la communication avec les portiers.
static final int NB_CHAMPS_DISPONIBILITE
String fabriquerTrameModification(int typeTrame, List< String > parametres)
Fabrique la trame de modification.
static final int NB_CHAMPS_MODIFICATION_DISPONIBILITE
final ReentrantLock mutex
void envoyer(String trame, String adressePortier)
Envoyer la trame.
static final int CHAMP_NOM
void setHandler(Handler handler)
boolean verifierTrame(String trame)
Vérifie la trame.
static final int CHAMP_TEMPERATURE
static final int TYPE_RECEPTION
Code du message indiquant une réception de données.
static final String DELIMITEUR_CHAMP
static final String TAG
TAG pour les logs.
static final int CHAMP_CODE
static final int DEMANDE_DISPONIBILITE
Handler handler
Handler permettant l'échange de Message avec l'activité
LinkedBlockingQueue< DatagramPacket > queueEmission
Queue d'émission des trames.
static final int CHAMP_INDICE_DE_CONFORT
static final String DELIMITEUR_EN_TETE
static final String adresseMulticast
Adresse multicast des portiers.
void recevoir()
Recevoir les trames des portiers.
static final int NB_CHAMPS_DEMANDE_DISPONIBILITE
static final int NB_CHAMPS_RETOUR_MODIFICATION_DISPONIBILITE
DatagramSocket socket
Socket UDP.