PL-s6-PRG-07-Android - ExempleClientServer

Transcription

PL-s6-PRG-07-Android - ExempleClientServer
Projet de Licence - 2015-2016
Il faut un serveur (avec port ouvert,
avec adresse fixe ou non)
• Utilisation de web socket
– Initialement javascript (http://socket.io/)
– Porté sur différentes technologies
– Interopérabilité
• Exemple de portage
• Côté client (android) :
http://socket.io/blog/native-socket-io-and-android/
• https://github.com/nkzawa/socket.io-android-chat
Projet de Licence - 2015-2016
– Côté serveur (websocket) :
https://github.com/mrniko/netty-socketio
• Avec Maven :
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.8</version>
</dependency>
• Ou téléchargement des libs
• Le serveur peut être fixe ou « sur un réseau
local » (comme un wifi)
Projet de Licence - 2015-2016
– Depuis un projet l’utilisant
mvn dependency:copy-dependencies
 target/dependencies
– Cf dossier lib de l’exemple
•
Ouverture du serveur (précisez le port)
Configuration config = new Configuration();
config.setHostname("192.168.0.103");
// adresse ip du serveur
config.setPort(10101);
// port à choisir
SocketIOServer server = new SocketIOServer(config);
•
Ecoute d’événement :
– Ici : l’event est « chatevent » (celui qui sera émit)
– IoObject : Mapping java du JSON attendu (une classe avec des attributs et des getters / setters
– L’action est ici de retransmettre le message à tous
Projet de Licence - 2015-2016
server.addEventListener("chatevent", IoObject.class, new
DataListener<IoObject>() {
@Override
public void onData(SocketIOClient client, IoObject data,
AckRequest ackSender) throws Exception {
server.getBroadcastOperations().sendEvent("chatevent", data);
}
});
• Dans les dépendances (dependencies) du graddle
on ajoute :
compile 'com.github.nkzawa:socket.io-client:0.3.0'
<uses-permission
android:name="android.permission.INTERNET" />
Projet de Licence - 2015-2016
• Il faut ajouter la permission dans le manifest,
avant <application>
• Il faut créerla socket
mSocket = IO.socket("http://192.168.0.103:10101");
// l’adresse du serveur peut être dans un fichier (public)
• Il faut s’abonner aux événements
mSocket.on("chatevent", onNewMessage);
• On se connecte
mSocket.connect();
Projet de Licence - 2015-2016
– Où onNewMessage est un Emitter.Listener avec une méthode
call qui a en paramètre le JSON reçu
– C’est exécuté sur un thread qui n’est pas le thread grapgique,
donc s’il y a des modifications de l’interface =>
runOnUIThread (Activity) ou post (View)
• Il faut gérer la connexion / déconnexion
• avec les méthodes onStop / onStart ou
onPause / onResume
– onStop : se déconnecter (mSocket.disconnect())
– onStart : on se reconnecte
Projet de Licence - 2015-2016
• Faire un objet JSON et l’envoyer avec le bon
libellé d’événement
JSONObject obj = new JSONObject();
try {
obj.put("userName", myName);
obj.put("message", texte);
Projet de Licence - 2015-2016
} catch (JSONException e) {
e.printStackTrace();
}
mSocket.emit("chatevent", obj);