SimpleChat est un ensemble de 2 applications permettant de déployer un serveur de chat et un client en Java.
L'application doit respecter les besoins suivants :
- Les utilisateurs doivent pouvoir se connecter sur le serveur de chat en même temps
- Un utilisateur doit pouvoir créer une chatroom
- Un utilisateur NE doit PAS pouvoir créer une nouvelle chatroom ayant le même nom qu'une chatroom déjà existante
- Les utilisateurs doivent pouvoir se connecter à une chatroom simultanément
- Les utilisateurs doivent recevoir en temps réel les nouvelles chatroom créées
- Un utilisateur doit pouvoir envoyer un nouveau message sur une chatroom
- Un utilisateur doit recevoir en temps réel les nouveaux messages envoyés dans une chatroom
- Le status des utilisateurs doit être mis à jour en temps réel dans le chat (actif / déconnecté)
- Chaque message doit avoir un ID unique sur la plateforme
- Chaque nom de chatroom doit être unique
- Un utilisateur est identifié par son username
Le projet SimpleChat utilise un build multi-projet Gradle
.
Le répertoire est composé de 3 projets :
- Un projet
server
contennant le service du serveur. - Un projet
clients/console
contenant le service d'un client lourd en Java. - Un projet
common
contenant le code source partagé par ces 2 services.
Le serveur utilise 2 ports :
- Un port exposant des web services pour les requêtes du client
- Un port ouvrant une socket avec les clients pour gérer les notifications
Le client se connecte donc à ces 2 ports également.
En effet, certains événements demandent un synchronisation entre le serveur et le client :
- Le serveur notifie le client (par la websocket) lors de la création d'une chatroom, d'un message ou lors du changement d'état d'un utilisateur
- Le client se connecte sur le serveur régulièrement (web service de login) pour notifier que l'utilisateur est toujours actif
Le serveur utilise le micro framework Spark Java pour ouvrir les webservices.
Le client utilise le framework Lanterna pour créer une interface utilisateur sur la console.
Les appels aux web services sont réalisés à travers l'API Fluent de la librairie Apache HTTP Components.
gradlew :server:run --args="<port Socket> <port web services>"
Exemple:
gradlew :server:run --args="1234 2345"
CTRL + c
`gradlew :clients:console:run --args=" "
Exemple:
gradlew :clients:console:run --args="127.0.0.1 1234 2345"