ClassCord Client
Application de Chat en Java
Dans le cadre du cours de SLAM (Solutions Logicielles et Applications Métiers), le projet ClassCord Client a été conçu comme une application de chat en Java.
L'objectif était de mettre en pratique la programmation orientée objet, la communication réseau via sockets TCP, la gestion de dépendances avec Maven, et la conception d'interfaces graphiques avec Swing. Le projet a été mené en plusieurs étapes, documentées jour après jour.
L'application devait permettre à un utilisateur de :
- ◈ Se connecter à un serveur de chat via IP et port.
- ◈ Choisir son mode d'accès (invité ou authentifié).
- ◈ Communiquer en temps réel avec d'autres utilisateurs.
- ◈ Envoyer des messages globaux visibles par tous ou des messages privés à un utilisateur ciblé.
- ◈ Gérer et afficher dynamiquement la liste des utilisateurs connectés avec leur statut (en ligne, absent, invisible).
- ◈ Langage: Java 11+
- ◈ IDE: VSCode et IntelliJ IDEA
- ◈ Gestionnaire de dépendances: Maven
- ◈ Bibliothèque externe: org.json (pour la manipulation des messages JSON)
- ◈ Interface graphique: Java Swing
- ◈ Architecture: Modèle MVC (séparation UI, contrôleur, modèle)
- ◈ Gestion de version: Git/GitHub
Le développement s'est déroulé sur plusieurs jours:
- Jour 1: Mise en place du projet Maven, création des classes de base (User, Message) et organisation en packages.
- Jour 2: Connexion au serveur via socket TCP, envoi/réception de messages en mode invité.
- Jour 3: Mise en place de l'authentification (inscription et connexion).
- Jour 4: Ajout des messages privés et de la liste dynamique des utilisateurs connectés.
- Jour 5: Gestion des statuts, finalisation graphique et corrections de bugs.
- Jour EXTRA: Réorganisation complète en respect strict du modèle MVC (controllers, models, UI).
Ce projet m'a permis de renforcer mes compétences en Java, en particulier dans la programmation orientée objet et la gestion des sockets TCP. La mise en place d'une architecture MVC a amélioré la structure et la maintenabilité du code. L'utilisation de Swing pour l'interface graphique a été un défi, mais a abouti à une application fonctionnelle et ergonomique. La gestion des utilisateurs et des messages en temps réel a également été une expérience précieuse, tant sur le plan technique que méthodologique.
Globalement, ce projet a été une excellente opportunité d'appliquer mes connaissances théoriques à un cas pratique, tout en développant de nouvelles compétences. Il reste à tester l'application en conditions réelles avec un serveur opérationnel et plusieurs clients connectés simultanément.
- ◈ Le code source de l'application disponible sur GitHub en cliquant sur ce lien.
- ◈ Une documentation technique détaillée (README.md) disponible sur GitHub.
- ◈ Des commentaires intégrés dans le code pour faciliter la compréhension.
- ◈ Des interfaces Swing illustrées (connexion, chat, login, statuts).
- ◈ Améliorer l'expérience utilisateur avec des notifications sonores/visuelles.
- ◈ Développer une version JavaFX plus moderne et réactive.
- ◈ Étendre la compatibilité multi-clients pour une utilisation à plus grande échelle.
- ◈ Ajouter la persistance des conversations, l'historique du chat.
1. Gérer le patrimoine informatique
- 1.1. Recenser et identifier les ressources numériques J'ai identifié et utilisé différentes ressources nécessaires au développement comme Java 11, Maven, les dépendances JSON, les IDE...
- 1.2. Exploiter des référentiels, normes et standards adoptés par le prestataire informatique J'ai respecté le standard de structuration du code, l'architecture MVC et le standard d'interopérabilité (l'utilisation du format JSON pour les échanges client-serveur).
- 1.3. Mettre en place et vérifier les niveaux d'habilitation associés à un service Gestion de la connexion par login/mot de passe pendant l'authentification.
- 1.4. Vérifier les conditions de continuité d'un service informatique J'ai travaillé sur la stabilité de la connexion TCP en gérant les erreurs et la reconnexion.
- 1.6 Vérifier le respect des règles d'utilisation des ressources numériques L'application respecte les règles de communication réseau, gestion de statuts et des identifiants.
2. Répondre aux incidents et aux demandes d'assistance et d'évolution
- 2.1. Collecter, suivre et orienter des demandes J'ai mis en place une interface de connexion et d'authentification, qui demande à l'utilisateur de fournir une adresse IP, un port, un login/mot de passe.
- 2.2. Traiter des demandes concernant les services réseau et système, applicatifs J'ai travaillé sur la connexion réseau via sockets TCP et j'ai géré les erreurs de connexion tels que le port invalide, IP incorrecte ou la perte de socket tout en assurant la continuité du service (fermeture propre de la connexion, écoute asynchrone des messages).
- 2.3. Traiter des demandes concernant les applications J'ai conçu et corrigé l'interface Swing afin que l'application soit utilisable (chat, liste d'utilisateurs, statuts).
J'ai conçu des mécanismes de retour d'information comme message de bienvenue, messages d'erreur, statuts des utilisateurs qui permettent d'orienter l'utilisateur.
J'ai géré les messages applicatifs conformément au protocole serveur (messages JSON: inscription, login, conversation global ou privée, changement de statut).
4. Travailler en mode projet
- 4.1. Analyser les objectifs et les modalités d'organisation d'un projet L'analyse du cahier des charges m'a permis de comprendre les objectifs et de planifier les différentes étapes du projet en fonction des contraintes définies.
- 4.2. Planifier les activités J'ai structuré ce projet en journées de développement afin d'avoir chaque jour des tâches précises comme le Jour 3: implémentation de l'authentification...
- 4.3. Évaluer les indicateurs de suivi d'un projet et analyser les écarts Cette compétence est acquise partiellement, car j'ai fait un suivi qualitatif tels que l'icône de chargement n'est pas totalement fonctionnelle et j'ai aussi rédigé des bilans quotidiens en listant ce qui fonctionnait et ce qui restait à corriger comme le bug du statut qui repassait en "online". En revanche je n'ai pas fait encore une évaluation formalisée avec des indicateurs (temps prévu vs temps passé...)
J'ai choisi une architecture MVC afin d'améliorer la structure et la maintenabilité du code, et j'ai analysé les modalités techniques: Maven, choix des IDE (VSCode et IntelliJ), format JSON.
5. Mettre à disposition des utilisateurs un service informatique
- 5.1. Réaliser les tests d'intégration et d'acceptation d'un service J'ai testé mon application au fur et à mesure du développement (compilation avec Maven, affichage console, connexion au serveur, envoi/réception de messages).
- 5.2. Déployer un service J'ai déployé un service applicatif côté client en mettant en place une application prête à l'emploi.
- 5.3. Accompagner les utilisateurs dans la mise en place d'un service J'ai préparé une documentation technique (README.md) pour aider les utilisateurs à installer, configurer et lancer le projet.
Il reste à réaliser des tests formels d'acceptation avec plusieurs utilisateurs sur un serveur de production.
J'ai également integré des messages d'aide et d'erreur dans l'interface et ajouté des éléments ergonomiques comme messages de bienvenue, pseudo mémorisé...
6. Organiser son développement professionnel
- 6.1. Mettre en place son environnement d'apprentissage personnel J'ai installé et configuré Java 11, Maven, deux IDE (VSCode + IntelliJ IDEA) et utilisé Git/GitHub.
- 6.2. Mettre en œuvre des outils et stratégies de veille informationnelle J'ai utilisé Internet et la documentation pour progresser et résoudre des difficultés techniques.
- 6.3. Gérer son identité professionnelle Je valorise mon projet en le présentant sur mon portfolio en ligne ainsi que sur GitHub.
- 6.4. Développer son projet professionnel Ce projet m'a permis de découvrir et d'approfondir des domaines clés comme Java, sockets TCP, MVC, UI Swing et de confirmer mon intérêt pour le développement d'applications.