Une application de chat E4 avec VertX et les WebSockets

SampleChat

 

Le but de cet article est l’utilisation de l’implémentation des WebSocket [1] par VertX pour une application de chat.

Tout le code est disponible sur GitHub [2]

Dans un premier temps nous créerons un serveur Http pour nos websocket. Puis nous intégrerons VertX dans eclipse,et nous terminerons avec notre client  RCP E4.

 

I Un serveur Http pour nos Websockets

Nous créons un simple serveur http qui lorsqu’il recevra un message les publiera aux autres websocekts connectées.

public class WebSocketServer extends AbstractVerticle{
@Override
public void start(Future fut) {
vertx.createHttpServer().websocketHandler(new Handler() {
public void handle(final ServerWebSocket ws) {
final String id = ws.textHandlerID();
System.out.println("new connection from"+ ws.toString() + "id "+id);
vertx.eventBus().consumer("chat",message -> {
ws.writeFinalTextFrame((String) message.body());
});
ws.handler(new Handler() {
public void handle(Buffer data) {
// When our websocket receive data we publish it to our consumer
vertx.eventBus().publish("chat",data.toString());
}
});
ws.closeHandler(handler ->{
System.out.println("Close WS ");
});
}}
).requestHandler(new Handler() {
public void handle(HttpServerRequest req) {
req.response().end("Chat");
//Not usefull but it display chat on our browser
}
}).listen(8080);
}
}

Ce code crée un serveur http qui écoutera sur le port 8080.

Nous créons aussi un serveur de websocket qui a chaque connexion de websockets l’enregistrera sur l’eventBus de vertX.  Ainsi à chaque message reçu par nos websockets nous publierons le contenu de ce message à notre bus d’événements et ainsi écrira le contenu du message dans nos websockets.

 

Pour builder ce serveur il suffit de faire dans le répertoire fr.thibaultleouay.chat.server

mvn clean install
Pour le compiler puis :
java -jar target/fr.thibaultleouay.chat.server-0.0.1-SNAPSHOT-fat.jar

Vous pouvez vérifier que votre serveur est correctement lancé en vous connectant à localhost:8080 la page doit affiché chat

II Intégration de VertX dans eclipse

Pour intégrer VertX dans eclipse, sachant que VertX n’est pas disponible sur Orbit, nous mettrons en place notre propre update site. Il sera ainsi facile de gérer nos dépendances dans notre target platform. Je préfére personellement utilisé un fichier target pour définir mes targets platforms des différents projets.

 Création d’un nouveau plugin à partir de Jar existant

Nous créons un nouveau plugin à partir de jar existant en choissisant les jars nécessaires à vertx que nous avons téléchargé [3]

Création d’une feature

Nous créons une feature contenant notre plugin précédemment créer.

Création d’un update site

A partir de notre feature nous pouvons facilement créer un update site. Nous pouvons ainsi publier notre update site sur un serveur web pour pouvoir installer vertx dans notre eclipse. Par exemple http://thibaultleouay.github.io/VertX/ est mon update site.

 

III Création du client de chat RCP

 

Pour la création de cette application j’ai utilisé le template d’une application e4 avec des vues et des commandes prédéfini.


// We create our websocket on ws://localhost:8080
client.websocket(8080, "localhost", "", websocket -> {
websocket.handler(data -> {
//When we receive data from our websocket we update our widget though we should do it on the SWT thread
display.asyncExec(new Runnable() {
@Override
public void run() {
textViewer.setText(textViewer.getText()+ "\n"+data.toString("UTF-8"));
}
});
});

Lors de la création de la Part nous nous connectons à notre serveur de websockets. Quand nous recevrons des messages de notre websockets nous les mettrons à jour dans notre textviewer.

Quand nous cliquons sur le bouton send de notre application nous envoyons notre message à notre serveur de websocket.

 

[1] http://vertx.io/docs/vertx-core/java/#_websockets

[2] https://github.com/thibaultleouay/

[3] http://vertx.io/download

Publicités
Une application de chat E4 avec VertX et les WebSockets