Exemple de communication client

publicité
Exemple de communication
client - server
•
•
•
•
Avec des implémentations de socketIO en java
Communication Asynchrone (callback)
Threads « masqués »
Protocoles (échange des messages, contenus des JSON) à déterminer
Côté Serveur
https://github.com/mrniko/nettysocketio
SocketIOServer
Le programme ne doit pas s’arrêter (par exemple, dormir jusqu’à « toujours »).
c.f. cours sur les threads
dans maven repository
Côté serveur : Dépendence « maven »
<dependencies>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.7</version>
</dependency>
</dependencies>
SocketIOServer : Création d’un serveur avec
une adresse et un port
// config
com.corundumstudio.socketio.Configuration;
Configuration config = new Configuration();
config.setHostname("127.0.0.1");
config.setPort(10101);
// creation du serveur
server = new SocketIOServer(config);
SocketIOServer : écoute d’événements
onDisconnect(SocketIOClient
• // abonnemement
server.addConnectListener(this);
arg0)
onConnect(SocketIOClient arg0)
server.addDisconnectListener(this);
Nom du message
Mapping message JSON / classe JAVA
server.addEventListener("query", AddressQuery.class,
this);
onData(SocketIOClient arg0, AddressQuery arg1, AckRequest arg2)
Exemple de mapping JSON - JAVA
public class AddressQuery {
{
address :
"une valeur"
}
private String address;
public AddressQuery() {
}
public AddressQuery(String addresse) {
super();
/* mapping JSON avec la
classe : l'attribut (et les
setter/getter) avec le
champ JSON via
introspection*/
this.address = address;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
Emettre un message
• Méthode sendEvent de SocketIOClient
• 1er paramètre : le nom du message (string)
• 2e paramètre : un objet java « mapping »
• En réponse à la connexion, à la réception d’un message…
• Envoi à tous via getBroadcastOperations() de SocketIOServer
• Idem : méthode sendEvent
• Liste des connexions via getAllClients() de SocketIOServer
Côté client (android)
https://github.com/socketio/sock
et.io-client-java
io.socket.client.Socket
Thread masqué (attention pour la mise à jour)
c.f. cours sur les threads
dans maven repository
Une implémentation java du client
• Même librairie pour java « desktop » et pour « android »
• Dépendance
• graddle :
compile ('io.socket:socket.io-client:0.8.3') {
exclude group: 'org.json', module: 'json'
}
// car cela est dans le java android
• maven :
<dependency>
<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>0.8.3</version>
</dependency>
Dans android : connexion / écoute
• Se déconnecter dans onPause
• Et se désabonner des messages (« off »)
• Se (re)connecter quand nécessaire ou dans onResume
• Création :
Socket mSocket = IO.socket(serverAddress);
//"http://192.168.1.23:10101";
//connexion
mSocket.connect();
// abonnement aux messages « map » via // Emitter.Listener
mSocket.on("map", this);
// pour annuler : mSocket.off("map");
Emitter.Listener -->
call(Object... args) avec en 1er
paramètre le JSON reçu
Emettre un message
JSONObject obj = new JSONObject();
try {
obj.put("nom attribut json", valeur);
// etc.
} catch (JSONException e) {
e.printStackTrace();
}
mSocket.emit("nom_message", obj);
Téléchargement