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);