Aquarium en réseau - serveur et clients
Projet 30
Caractéristiques
- Date : Mars - Mai 2023
- État : Terminé
- Thèmes : utilisation librairie graphique java, terminal, utilisation de threads, utilisation réseau
- Tags : En reseau, Programmation orienté objet, Programmation, Projet scolaire, Java, C
Description
Ce projet scolaire s'est fait dans le cadre des cours de réseau de l'ENSEIRB-MATMECA de deuxième année. Quatre camarades m'ont accompagné, Nicolas Przybylski , m'ayant déjà épaulé sur deux projets scolaires précédents, Maël Paul, Louis-Victor Ladagnous et Mathieu Lam. Ce projet porte sur la représentation d'un aquarium avec un serveur, simulant quelques poissons, et des clients, permettant de rentrer des commandes et d'observer une partie de l'aquarium. Le projet s'est donc déroulé sur deux axes, un axe en C pour développer le serveur et un en Java pour développer le client. Pour expliquer rapidement, je n'ai pas beaucoup travaillé sur la partie C, m'occupant seulement de relever des éventuels bugs et d'ajouter de la documentation.
Pour la partie Java, j'ai naturellement proposé ma bibliothèque, sachant que ce projet serait un bon support, d'expérimentation et d'amélioration pour celle-ci. Je savais aussi que ce projet ne serait pas suffisamment demandant en éléments d'interface (GUI) complexes pour que ce soit un frein à nos idées. Dans un premier temps, j'ai développé l'élément graphique qui supporterait les entrées utilisateur. C'était la partie où le moindre bug, n'était pas permis, car la partie qui serait le plus utilisée par l'utilisateur. Pour mettre en place cet élément d'intéraction, j'ai corrigé des problèmes subsistants en rapport à la classe "Text" et ses fonctionnalités tout en ajoutant des nouvelles. J'ai aussi implémenté toutes les actions spéciales que pourrait faire un utilisateur comme le copier coller, le déplacement du curseur lettre par lettre, mot par mot, la sélection de commandes déjà écrites, etc.
La partie la plus compliquée de ce développement a été la conceptualisation de l'interface entre le clavier et l'application. Ce que je récupère au niveau de ma bibliothèque n'est pas le texte réellement entré par l'utilisateur, mais un ensemble de touches physiques. J'ai fait un système permettant de convertir la touche physique en caractère. Cela dépend de la langue du clavier ou des touches de modification pressées. Par exemple, la touche Shift fait passer les lettres de majuscules à minuscules ou vice-versa.
Pour la suite de mon travail, j'ai découpé ma scène en plusieurs séquences de code correspondant à la séquence de connexion. C'est une architecture qui nous a évité le "spaghetti code" et de rapidement savoir quand était appelée quelle partie de code. J'ai rajouté des éléments d'interface permettant à l'utilisateur de voir l'état de connexion au serveur, quel numéro de client nous est attribué, les commandes passées. Pour finir, sur la maquette du client, j'ai ajouté une image de fond et créé un shader pour simuler l'effet de l'eau distordant l'image. Tout plus sympa pour l'utilisateur d'utiliser une belle application.
À partir de ce moment, le travail a été commun. Quand nous avons mis en place le réseau et les requêtes, nous avons vu que l'application avait des "freezes", et que l'utilisateur ne pouvait plus rien faire. Pour régler cela, nous avons codé un client threadé, qui s'occuperait d'envoyer les requêtes et de les recevoir. Ce client s'occupait aussi d'une surcouche "message" permettant d'identifier les messages envoyés en première intention, ou les messages de réponses. C'était indispensable pour la partie client et d'avoir le résultat des commandes de l'utilisateur.
Pour tester notre application, nous avons lancé plusieurs clients, quatre dans notre cas. Ensuite, nous avons rentré les commandes pour peupler l'aquarium sur un des clients. Le résultat était pour nous très satisfaisant, avec les poissons qui se déplaçaient d'écran en écran de façon assez fluide. Et surtout pour nous, l'accomplissement de deux mois de travail.
Visuels - (cliquer pour ouvrir en grand)





Hey test test