WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Serveur de jeux d'échecs

( Télécharger le fichier original )
par Ousman Lewis Soumbougma
Ecole d'Ingénierie Sup'Management - Master 1 ingenierie informatique 2008
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Sommaire

Dedicace 3

Remerciements 3

Avant Propos 3

Introduction 3

PREMIERE PARTIE -- Présentation de l'école 3

I. HISTORIQUE ET VOCATION 3

II. STRUCTURES ET MOYENS 3

1. C.P.P.S et C.O.D 3

2. Structure administrative et pédagogique très renforcée 3

3. Cadre agréable et adéquat 3

DEUXIEME PARTIE -- Etude du thème 3

A. PRESENTATION DES OUTILS DE L'APPLICATION 3

I. CHOIX DES OUTILS ET DE LA PLATEFORME 3

1. La plateforme 3

2. Le langage 3

3. Méthodes spéciales utilisées 3

II. PRINCIPE DE L'ARCHITECTURE CLIENT-SERVEUR 3

1. Architecture d'un client 3

2. Architecture d'un serveur 3

3. Quelques classes 3

III. ANALYSE ET MODELISATION UML 3

1. Diagramme Use case de l'application 3

2. Diagramme de séquence de la connexion au serveur 3

3. Diagramme de séquence du jeu 3

B. L'APPLICATION SERVEUR 3

I. Architecture du Serveur 3

II. Les principales Classes, Méthodes et leurs rôles 3

1. Les principales classes 3

2. Les méthodes de la classe Server 3

3. Les méthodes de la classe Lanceur_thread 3

4. Les méthodes de la classe Server_form 3

III. Les Interfaces du logiciel Serveur 3

C. L'APPLICATION CLIENTE 3

I. Architecture du Client 3

II. Les principales Classes, Méthodes et leurs Rôles 3

1. Les principales classes 3

2. Les méthodes de la classe Form_Game 3

3. Les méthodes de la classe Form_Client 3

4. Les méthodes de la classe Connexion_Serveur 3

5. Les méthodes de la classe Lanceur_Thread 3

6. Les méthodes de la classe MyStreamWriter 3

7. Les méthodes de la classe MyStreamReader 3

III. Les Interfaces du logiciel Client 3

D. L'INSTALLATION DU LOGICIEL 3

TROISIEME PARTIE - Suggestions et Améliorations possibles 3

Conclusion 3

Wébographie 3

Bibliographie 3

Dedicace

DEDICACE

Ø Au Seigneur Mon Dieu le Tout Puissant et Miséricordieux, qui exauce mes voeux et entend mes prières ;

Ø A ma mère, une mère merveilleuse, bienveillante et affectueuse qui n'a ménagé aucun effort tant moral que matériel pour me soutenir.

Reçois ici ma chère maman toute mon affection et

ma reconnaissance.

Ø A mon père en guise de reconnaissance pour les nombreux sacrifices, tant moral que matériel, que vous avez consenti pour ma réussite scolaire.

Recevez toute mon affection et mes sentiments de gratitude.

Remerciements

Nos sincères remerciements à toutes les personnes qui m'ont permis et qui ont contribué à l'élaboration de ce mémoire de fin de 2nd cycle (BAC+4) - cycle ingénieur:

ü A Monsieur Abdesselam ERKIK Président Réseau Universitaire Euro-Africain

ü A Monsieur Anass ERKIK le Directeur Général du Groupe SUP'MANAGEMENT,

ü A tout le personnel de l'école SUP'MANAGEMENT (Administration et tout le corps enseignant),

ü A toute ma famille, particulièrement à ma chère mère Korogo Adam, à mon cher père M. Salif Soumbougma pour leurs soutiens. Je vous adore Papa et Maman.

ü A mes amis, collègues de classe et amies au Maroc pour leurs soutiens et éventuels dévouements, particulièrement Mlle KAMAYE Samira qui a toujours été présente et aux petits soins pour mener à bien ce mémoire. Je l'en suis vraiment reconnaissant !

ü A tous ceux qui, d'une manière ou d'une autre m'ont aidé et encouragé tout au long de mes études et de mon stage.

Nous avons été particulièrement touchés par la bonne volonté et la disponibilité de Monsieur Naoual mon Professeur et Directeur de mémoire.

Espérons que ce travail pourra compenser toutes les énergies mobilisées

Avant Propos

Définit comme étant la science du traitement automatique de l'information, l'informatique est devenue aujourd'hui un moyen moderne et incontournable du développement basé sur l'utilisation de l'ordinateur. Présente dans tous les domaines, elle ne cesse de se développer, de changer de façade. Elle aide à la décision et aux traitements de multiples tâches et tâches répétitives, etc. Enfin présente dans tous les domaines. Avec les Nouvelles Technologies de l'Information et de la Communication (NTIC), nous assistons à un développement scientifique et technique fulgurant et exponentiel car présente maintenant dans notre quotidien.

Le progrès dans le domaine informatique a entraîné la création de nombreuses écoles d'informatique dont le Groupe SUP'MANAGEMENT qui offre une formation centrée sur toutes les nouvelles technologies et domaines les plus utilisés permettant ainsi aux étudiants d'être très compétents en entreprise. Cette formation est continuelle et va jusqu'au Master (BAC + 5). Notre choix s'est porté sur le Groupe SUP'MANAGEMENT Fès - Maroc car il constitue une école-référence en matière d'informatique et de nouvelles technologies au Royaume du Maroc et dans le monde.

La formation d'ingénieur dure trois (5) ans et se déroule en deux (2) phases : une phase théorique sanctionnée par deux examens écrits semestriels et une seconde phase couverte par un stage pratique en entreprise de durée variable en fonction du cycle dans le but de réaliser un rapport qui sera présenté et soutenu publiquement devant un jury. Cela aussi permet d'approfondir nos connaissances théoriques et acquérir des connaissances pratiques et professionnelles.

Dans le souci de rendre notre apprentissage accessible à tout le monde, nous avons entrepris une étude faite d'informations nécessaires tirées de l'observation, de la manipulation, de la toile (Internet) et des renseignements reçus de nos professeurs. Toutes ces informations recueillies sont organisées et regroupées dans ce mémoire de fin de cycle.

C'est dans cette même optique que le présent mémoire s'inscrit comme étant le fruit bénéfique de notre séjour au Groupe SUP'MANAGEMENT et aussi au Royaume du Maroc. Il sanctionne quatre années de formation au Diplôme d'Ingénieur Cycle Normal option Ingénierie Informatique effectuées au sein du Groupe SUP'MANAGEMENT (Fès - Maroc).

Introduction

L'évolution des langages de programmation vers le langage logique presque humain a conféré à l'informatique le pouvoir de la création d'applications de plus en plus sophistiquées.

Cela explique donc l'évolution des logiciels très performants sur le marché. Les applications deviennent de plus en plus intelligentes et rapides tant sur le plan communication que celui de l'exécution. Et cela, dans le souci de rendre toutes les taches vraiment automatiques et capables d'être traitées par un ordinateur. Mais force est de constater que la plupart des applications développées sont plus monopostes. C'est pour cela pendant notre étude, nous nous sommes intéressés à une application multiposte et réseau utilisant un serveur digne de ce nom.

Et c'est à cet effet que nous avons orienté notre étude sur le thème « SERVEUR DE JEU D'ÉCHECS EN RÉSEAU ». Cette étude nous permettra de comprendre les taches effectuées par un serveur de jeu et comment les clients ou joueurs y interviennent pour jouer.

Tout au long de l'étude de notre document articulé sur trois (3) grandes parties ou axes, nous présenterons notre structure de formation (SUP'MANAGEMENT) dans la première partie ; par la suite aborder notre thème d'étude dans la seconde partie c'est-à-dire décrire le fonctionnement de l'application serveur ainsi que l'application cliente et expliquer le fonctionnement des méthodes qui interviennent dans les échanges de données entre les applications clientes et l'application serveur; et pour finir la troisième partie traite essentiellement du déroulement pratique de nos quatre années d'études et des critiques que nous avons à faire.

PREMIERE PARTIE -- Présentation de l'école

PREMIERE PARTIE

PRESENTATION DE L'ECOLE SUP'MANAGEMENT

I. HISTORIQUE ET VOCATION

Depuis 1992, le Réseau Universitaire Euro-Africain - Groupe SUP'MANAGEMENT rayonne sur l'Afrique pour former les managers et les informaticiens de demain. Le Réseau Universitaire Euro-Africain est présent sur 7 pays : Le Maroc, L'Espagne, Le Mali, La Côte d'Ivoire, La Mauritanie, Le Sénégal et Les Îles Comores, et est représenté dans 13 pays africains à savoir : Djibouti, Tunisie, Guinée, Gabon, Cameroun, Benin, Togo,  Niger, Burkina Faso, Tchad, Centrafrique, Congo et Congo Démocratique. Le Réseau, qui s'est forgé une image de leader sur le Continent, accueille, chaque année, plus de 2000 étudiants de 23 nationalités différentes dans ses 8 centres axés sur trois pôles de formation :

· Sup'Management (Formation supérieure)

· Infohouse (Formation professionnelle)

· et Cerf Consult (Formation continue).

Le Réseau Universitaire Euro-Africain / SUP'MANAGEMENT, est un réseau d'Ecoles Internationales de Management et de Technologies de l'information qui a pour vocation de former des cadres managers et des dirigeants d'entreprises dans ses différentes entités, et ce via :

· Une formation polyvalente et opérationnelle de haut niveau,

· Un enseignement pragmatique et en phase avec les exigences du monde professionnel,

· Une vie associative qui consacre l'épanouissement individuel et le développement personnel,

· Une préparation aux métiers de décideurs et de managers dotés d'une bonne capacité d'adaptation, d'esprit de challenge, de créativité et d'initiative.

SUP'MANAGEMENT offre en outre des formations supérieures de niveau d'ingénieur, grâce à ses cycles de formation offerts dans le cadre de deux Pôles: School of Business Administration et School of Engineering.
Ces formations peuvent être complétées par des troisièmes cycles et des études doctorales sur les centres du réseau en Afrique, en Belgique, en Espagne, en France ou aux U.S.A.

Pour accomplir adéquatement son projet pédagogique ambitieux et innovateur, le Groupe dispose d'une équipe d'une centaine de cadres et de plus de 150 professeurs, qui veille, au quotidien, sur le bon déroulement des activités académiques et parascolaires des établissements du réseau, sur l'encadrement et l'accompagnement des étudiants.

Les différents départements, la cellule d'orientation, le comité pédagogique, la cellule d'assistance à l'emploi et à la création d'entreprise, constituent par ailleurs des outils non moins importants au service des étudiants.

II. STRUCTURES ET MOYENS

Le Groupe est doté de structures et de moyens importants, dont notamment :

1. C.P.P.S et C.O.D

Il s'agit d'un Comité de Parrainage et de Pilotage Scientifique (C.P.P.S) et d'un Conseil d'Orientation et de Développement (C.O.D). Composés de personnalités de renom du monde de l'éducation et des affaires et de la société civile, ces organes veillent au suivi et au réajustement de la politique pédagogique du Groupe et de sa stratégie de développement, compte tenu des mutations et des exigences du monde socio-économique.

2. Structure administrative et pédagogique très renforcée

· Une Présidence du Réseau Universitaire Euro-Africain

· Une Direction Générale par filiale entourée d'une équipe multidisciplinaire d'Administrateurs,

· Des Départements internes (Direction des Etudes, Relations Extérieures, Relations Internationales, etc. ...) et diverses cellules pédagogiques.

· Un Corps Professoral (dont un taux important de permanents) composé d'universitaires reconnus et de professionnels expérimentés.

3. Cadre agréable et adéquat

· Une multitude de salles de cours et de travaux pratiques,

· Des équipements pédagogiques et scientifiques de pointe,

· Des centres informatiques,

· Des cybers nets et des logithèques-médiathèques,

· Des centres de documentation,

· Des cafétérias et des espaces de détente.

DEUXIEME PARTIE -- Etude du thème

DEUXIEME PARTIE

ETUDE DU THEME :

SERVEUR DE JEU D'ECHECS EN RESEAU

A. PRESENTATION DES OUTILS DE L'APPLICATION

Notre étude sera orientée principalement sur l'analyse, la conception et l'élaboration d'un serveur de jeu et un exemple de client ou de l'application utilisée par les joueurs pour se connecter au jeu et participer au jeu. On peut même utiliser Internet (débit min. 256 Kb pour le client) si l'adversaire est a l'autre bout du monde.

Il faut souligner qu'en jouant pour pouvez en même temps discuter comme sur YAHOO ou MSN. Notre application se présente en fait en deux applications :

· Une application SERVEUR et

· Une application CLIENTE

Notre application qui se nomme « OUS CHESS GAME » est un ensemble d'application Client-serveur voué dans le service d'un jeu d'échecs en réseau. Le serveur est nommé « OUS CHESS GAME Server » et le client « OUS CHESS GAME Player ». Le jeu se déroule via un client. C'est-à-dire que pour jouer aux échecs, le serveur de jeu doit être démarré et vous devez connaitre son adresse IP et configurer le Player via préférence pour pouvoir vous connecter. Ensuite si un autre joueur est connecté vous pouvez jouer avec lui en double-cliquant sur son nom !! C'est très simple.

L'élaboration de ces application nous a obligé à faire appel aux récentes versions des langages de programmation et les plus utilisées afin d'avoir les outils adéquats. A titre indicatif, on vous informe que :

· L'application cliente est riche de 71 méthodes ou fonctions, 13 classes d'objets, 5 méthodes déléguées et 5 winforms.

· L'application Serveur moins lourde est constituée de 40 méthodes ou fonctions, 8 classes d'objets, 1 méthode déléguée et 4 winforms.

Il nous a fallu exactement 8 mois et 23 jours pour concevoir cette application qui pourrait être aussi améliorée par la future génération.

I. CHOIX DES OUTILS ET DE LA PLATEFORME

1. La plateforme

On a opté pour l'utilisation de la plateforme Framework .Net pour la conception et non Java. Le serveur fonctionne sous la version 3.5 et le client la version 2.0 pour lui permettre de pourvoir fonctionner sur tous les ordinateurs. Java est beaucoup plus portable que le C# mais il existe une version de .NET pour Linux, BSD, MacOs X, etc. développée par Novell (www.mono-project.com).
Quelques comparaisons C# 2.0 / Java 1.5 :

Ø Propriétés Get/Set en C# non présentes en Java,

Ø Surcharge d'opérateurs en C# non présente en Java,

Ø Types nullables en C# non présents en Java,

Ø Délégués en C# non présents en Java,

Ø Contrairement au C#, il n'y a pas de type structure en Java,

Ø Contrairement au C#, en Java certains types ne sont pas des objets (ex: int),

Ø Facilité de la conception gratuite qui est super assistée.

Et ce n'était que la version 2.0 car la version 3.0 et 3.5 apporte encore plus de nouveautés et d'amélioration.

Même si les outils DotNet ne sont pas gratuit mais en valent le coup !
Le Framework .NET est un composant logiciel pouvant être ajouté au système d'exploitation Microsoft Windows. Il peut être téléchargé sur le site de Microsoft et est également partiellement fourni dans certaines déclinaisons commerciales. Microsoft a aussi développé une version allégée du Framework pour le développement d'applications pour son système d'exploitation pour assistants personnels (PDA) : le .NET compact Framework.

Le Framework gère tous les aspects de l'exécution de l'application :

§ Il alloue la mémoire pour le stockage des données et des instructions du programme ;

§ Il autorise ou interdit les droits de l'application ;

§ Il démarre et gère l'exécution ;

§ Il gère la réallocation de la mémoire pour les ressources qui ne sont plus utilisées.

Microsoft® .NET (prononcé « point net ») évoque à la fois une vision sur la manière d'écrire les logiciels et un ensemble d'outils de développement de logiciels indispensables à la concrétisation de cette vision.

La vision .NET a pour ambition de donner corps à cette capacité, de simplifier l'écriture de systèmes qui se connectent et communiquent en toute sécurité entre eux à tout moment, en tout lieu et sur n'importe quelle machine. Les Web Services sont la technologie à la base de la mise en oeuvre de ce principe. Cette technologie est à la fois une méthodologie et une couche de transport pour le transit d'informations entre les composants sur des machines, des réseaux et des systèmes d'exploitation différents.

La prise en charge de Web Services est vaste. Un certain nombre de sociétés utilisent déjà les Web Services pour se connecter à leurs partenaires. Microsoft est en train d'ajouter la prise en charge des XML Web Services à travers sa gamme complète de produits. Du point de vue du développeur, .NET facilite l'écriture de systèmes qui se connectent les uns aux autres en utilisant Microsoft Visual Studio .NET, .NET Framework et les XML Web Services.

.NET Framework est bien plus que les Web Services. Au coeur de .NET se trouve le .NET Framework, qui comprend le Common Language Runtime et les bibliothèques de classes. Ces deux composants fournissent le moteur d'exécution et les API de programmation qui permettent de créer des applications .NET.

Les applications compilées pour .NET ne sont pas compilées directement en code natif, mais en un langage intermédiaire appelé Microsoft Intermediate Language (MSIL). Quand une application s'exécute pour la première fois, le compilateur juste à temps du Common Language Runtime compile le code MSIL en code natif avant son exécution. Le Common Language Runtime est bien plus qu'un simple compilateur JIT ; il fournit également des services d'exécution de bas niveau, comme la récupération de l'espace mémoire, le traitement des exceptions, les services de sécurité et le contrôle de sécurité du type d'exécution. Étant donné le rôle du Common Language Runtime dans la gestion de l'exécution, les programmes qui ciblent le .NET Framework sont parfois appelés applications « gérées ».

Le .NET Framework est un ensemble de classes de création d'applications qui exécutent le Common Language Runtime. Ces bibliothèques de classes assurent la prise en charge étendue d'un large éventail de tâches, notamment l'accès aux données, la sécurité, l'entrée/sortie de fichiers, la manipulation XML, la messagerie, la réflexion des classes, les Web Services, ASP.NET et les services Microsoft Windows.

L'attribut le plus unique de .NET est peut-être sa prise en charge de langages multiples. Microsoft a déjà expédié quatre langages commerciaux pour le .NET Framework : Visual C#® .NET, Visual Basic® .NET, les Managed Extensions pour C++ et Visual J# .NET. De nombreux autres langages .NET compatibles sont également en cours de développement, notamment Perl, Python et COBOL.

Pour faciliter la création de langages pour le .NET Framework, Microsoft a créé la Common Language Specification (CLS). La CLS décrit les caractéristiques devant être fournies par chaque langage pour permettre l'utilisation du .NET Framework et du Common Language Runtime et l'interopérabilité avec des composants écrits dans d'autres langages. Si un langage implémente la fonctionnalité nécessaire, on dit qu'il est « .NET compatible ». Chaque langage .NET compatible prend en charge les mêmes types de données, utilise les mêmes classes .NET Framework, compile dans le même langage intermédiaire MSIL et utilise le même Common Language Runtime pour gérer l'exécution. Au vu de ceci, chaque langage .NET compatible est un citoyen .NET de première catégorie. Les développeurs sont libres de choisir le meilleur langage pour un composant particulier sans rien perdre des avantages et de la latitude résultant de la plate-forme. En outre, les composants écrits dans un langage peuvent facilement communiquer avec un composant écrit dans un autre. Par exemple, vous pouvez écrire une classe en C# qui découle d'une classe de base écrite en Visual Basic. La CLS a été soumise à l'ECMA pour normalisation, ce qui encourage de nombreux développeurs de langages à créer des versions .NET compatibles de nombreux langages. Au moment où je vous écris, plus de 20 langages .NET compatibles sont en cours de développement.

La figure 1 montre les divers composants de .NET agencés sur le système d'exploitation. Le .NET Framework se compose des quatre cadres bleus - qui représentent ASP.NET, Windows Forms, ADO.NET et XML - et de sous-composants.

Figure 1 : L'architecture du .NET Framework.

Pour permettre le développement de .NET, Microsoft a réécrit ses outils de développement et les a réunis sous le nom Visual Studio .NET. Visual Studio .NET prend en charge le développement d'applications dans un langage unique ou dans plusieurs langages. Le même environnement de développement intégré (IDE) est utilisé pour la conception, le développement, le débogage et le déploiement des composants de .NET.

Il prend en charge la création d'applications pour consoles, d'applications Windows, de DLL, d'applications Web, de Web Services et d'applications pour appareils portables. Il a des fonctions uniques ultra-productives telles que : IntelliSense ; générateurs visuels pour Web Forms et Windows Forms, XML Schemas et données ; débogueur inter-langages qui progresse de manière transparente d'un code écrit dans un langage à un autre ; intégration étroite au .NET Framework ; aide dynamique qui fournit continuellement une aide contextuelle à mesure que vous tapez ; liste des tâches qui indique les erreurs de compilateur et les tâches à exécuter ; fonctions de conception d'architecture comme une intégration à Visio et un Server Explorer pour l'accès visuel aux bases de données, aux services Windows, aux compteurs de performance et à des composants d'applications côté serveur.

Microsoft Visual Studio .NET est un outil de développement qui a été récompensé par la profession. À ce jour, Visual Studio .NET a déjà reçu de nombreux prix, notamment deux prix de la productivité 2002 SD Magazine et le prix d'excellence technique 2001 de PC Magazine (à l'époque où le produit n'en était qu'à sa version bêta).

Comparaison de .NET à Java

Pour les développeurs Java chevronnés, .NET peut rappeler la plate-forme Java ; elles fournissent toutes deux une manière structurée de créer des applications, ont toutes deux des langages qui se compilent en code intermédiaire et elles proposent toutes deux une grande bibliothèque d'API pour le développement d'applications. Toutefois, .NET s'articule autour de plusieurs objectifs différents de la plate-forme Java.

Du point de vue conceptuel, Java est deux choses à la fois : la plate-forme Java (runtime et API) et le langage Java. L'objet de la plate-forme Java consiste à prendre en charge les applications écrites dans le langage Java et compilées en code mobile Java. Même s'il y a eu des tentatives de compilation d'autres langages en code mobile Java, ces tentatives se résument essentiellement à des exercices théoriques. L'idéal de Java a toujours été un langage unique sur des plates-formes multiples.

.NET est lui aussi deux choses en une : le .NET Framework (runtime et API) et la pléthore de langages de programmation pris en charge. L'objet du NET Framework consiste à prendre en charge des applications écrites dans n'importe quel langage et compilées en MSIL. L'objectif de .NET est une plate-forme unique partagée par des langages multiples.

Avantages de .NET sur Java

En plus de sa latitude avec les langages, .NET présente un certain nombre d'avantages supplémentaires sur Java. Certains figurant parmi les plus significatifs sont récapitulés ci-dessous :

Comme Java est multiplate-forme, l'ensemble des classes d'infrastructures s'est traditionnellement limité à ce qui était disponible sur toutes les plates-formes. Cette limitation affecte à la fois la portée et la richesse des classes : leur portée se voit réduite au plus petit dénominateur commun des ordinateurs et systèmes d'exploitation disponibles. Elle influe également sur la richesse même des classes. Les classes Java intégrées sont généralement très simples et les développeurs bâtissent souvent leur propre infrastructure là-dessus ou doivent se tourner vers les infrastructures d'un tiers -- par exemple, l'analyse de documents XML. Pour analyser des documents XML dans Java avant la sortie de JDK 1.4, vous deviez soit utiliser une bibliothèque d'un tiers, soit écrire votre propre analyseur. L'écriture de votre propre analyseur représente en général plus de 100 lignes de code.

Le .NET Framework est bâti sur la plate-forme Windows. Une version du Common Language Runtime et de la bibliothèque de classes .NET est également disponible pour FreeBSD. Les classes offrent l'éventail complet de ce qui est disponible sur cette plate-forme. En outre, ces classes sont plus riches que ce qui est disponible dans Java : .NET fournit plus une infrastructure de programmation qu'une base sur laquelle créer une infrastructure de programmation.

La fidélité du .NET Framework est supérieure à celle de la plate-forme Java. C'est la pleine puissance de Windows qui est mise à la disposition des programmes .NET et non pas le plus petit dénominateur commun de toutes les plates-formes comme avec Java.

« ...la vérité, c'est que l'écriture de code avec .NET signifie que Microsoft fournit tous les outils conformes aux normes que 90 % des développeurs auront probablement besoin d'utiliser, tandis que Java signifie toujours concocter une solution à partir de morceaux disparates d'origines diverses. »

Bornstein, Niel. Mai 2002. Pull Parsing in C# and Java.

Écrivez une fois, déboguez partout

Alors que l'idéal de Java à savoir, « écrire une fois, s'exécuter partout », a son charme, la plupart des applications écrites aujourd'hui ne ciblent qu'un seul système d'exploitation. Il y a deux raisons techniques à cela : comme la portée et la richesse de l'infrastructure Java sont limitées, les développeurs utilisent souvent des classes propriétaires pour accéder à des fonctions mises à la disposition de la plate-forme cible. Deuxièmement, comme les incompatibilités persistantes entre les diverses implémentations Java continuent à miner les efforts réels inter-plates-formes, les développeurs doivent tester leur code sur chaque plate-forme qu'ils désirent prendre en charge. Au vu de cela, certains développeurs se moquent souvent de Java en l'appelant la plate-forme « Écrivez une fois, déboguez partout ».

Sécurité

La sécurité est bien supérieure dans .NET. En plus d'API pour la cryptographie, des cookies sécurisés et de l'authentification, il propose également un mécanisme riche et extensible d'assignation de différents niveaux d'autorisations à différents groupes d'utilisateurs, selon l'origine du code. Par exemple, l'ensemble du code de Microsoft peut être traité comme étant sécurisé. Tout le code issu d'une URL spécifique peut se voir accorder (ou refuser) l'accès en lecture/écriture à des ressources spécifiques telles que répertoire temp ou écran. En outre, les applications peuvent être marquées comme exigeant certaines autorisations (par exemple, exigence d'accès au système de fichiers). En l'absence de ces autorisations, l'application ne se chargera pas. Comme le contrôle de sécurité a lieu au moment du chargement, le développeur n'a plus à se soucier d'écrire une logique de détection d'échec de sécurité à travers l'application. Ce contrôle est géré par une nouvelle technologie du nom de « sécurité d'accès du code », qui fonctionne pour du code chargé à partir d'Internet ou de la machine locale.

Gestion des numéros de versions

Le .NET Framework a un système de contrôle des versions plus robuste que Java. Dans Java, si deux versions d'une même classe sont installées, l'exécution Java chargera simplement la première classe qu'elle trouvera sur le chemin de classe, ignorant l'autre version. En revanche, .NET a été conçu pour une prise en charge riche des versions. Avec une exécution côte à côte, deux versions différentes ou plus appartenant à la même classe peuvent être chargées et exécutées simultanément. Chaque application peut choisir son mécanisme d'association : établissement d'une association à une version spécifique d'une bibliothèque de classes, à la dernière version de la bibliothèque ou à la version d'un endroit particulier. En outre, cette politique peut être appliquée sur la base machine par machine pour ignorer ou préciser davantage le contrôle des versions. Cette attention au contrôle des versions trouve son prolongement dans les langages de programmation. Par exemple, dans le langage C#, les méthodes sont non virtuelles par défaut et les développeurs doivent déclarer explicitement les méthodes ignorées. Cela signifie que les composants ne peuvent pas accidentellement casser le comportement dans les classes de base. C# n'exige pas que le développeur déclare explicitement quelles exceptions peuvent être introduites par une méthode : si la liste des exceptions change, le code client fonctionnera toujours.

Performance

Là où .NET surpasse Java, c'est dans sa capacité à peaufiner le comportement de l'application et sa performance. Les blocs fonctionnels de l'application centrale sont synonymes de modularité et haut rendement. Par exemple, avec l'accès hors ligne aux données ADO.NET, un plus grand nombre de fonctions de données peuvent avoir lieu en mémoire, là où la Java Database Connectivity (JDBC) exige un retour à la base de données. En outre, l'architecture de l'application .NET a été conçue pour être plus rapide. Par exemple, les pages Web ASP.NET procurent une nette amélioration des performances comparativement aux Active Server Pages (ASP), Java Server Page (JSP) et langages de script incorporés HTML. Comparée à la plate-forme Java, la performance de .NET est non seulement meilleure dans les scénarios mono-utilisateur, mais aussi dans les scénarios multi-utilisateurs massifs.

C'est pour cela que le Framework .NET est qualifié d'environnement « managé ». Il est composé de deux blocs principaux :

Ø Le CLR (Common Language Runtime) et

Ø la bibliothèque de classes .NET.

a. Le CLR (Common Language Runtime)

Le CLR est à .NET ce que la JVM est à Java, c'est-à-dire une machine virtuelle, sans laquelle l'exécution de code .NET ne serait pas possible. À l'inverse de son concurrent, le Framework .NET a été conçu pour permettre l'interopérabilité entre différents langages.

Figure 1 : Schéma explicatif du Common Language Infrastructure (CLI)

Quel que soit le langage utilisé pour écrire une application .NET, le code doit être transformé en MSIL (Microsoft Intermediate Language). Ce code intermédiaire ne comporte aucune instruction relative au matériel (i.e. hardware) ou au système d'exploitation. Il ne peut donc pas être exécuté directement. Malgré cela, on pourrait tout à fait imaginer écrire directement une application en IL, langage qui ressemble à l'assembleur, sans passer par un langage de dernière génération comme le C#.

Le CLR est nécessaire pour exécuter le code intermédiaire. Il est basé sur le CTS (Common Type System) et le CLS (Common Language Specification). Il apporte de nombreuses fonctionnalités comme le Garbage Collector (la mémoire utilisée par l'application lors de l'exécution est optimisée), la BCL (Base Class Library), et le système de sécurité. Une fois le code présent dans le CLR, il va enfin pouvoir être compilé par le JIT Compiler (Just in Time) en langage natif de la machine.

Il existe trois types de JIT :

§ Pré-JIT : le code entier est directement compilé ;

§ Econo-JIT : le code est compilé par parties, et la mémoire libérée si nécessaire ;

§ Normal-JIT : le code n'est compilé que quand c'est nécessaire, mais est ensuite placé en cache pour pouvoir être réutilisé.

Quel que soit le type de JIT, le but est d'accélérer l'exécution du code en réutilisant dès que possible le cache. À la première exécution, le code est compilé. Par la suite et aussi longtemps que l'application ne subit pas de modifications, le cache sera utilisé, d'où une vitesse d'exécution bien plus rapide que lors de la première exécution.

Le JIT fourni par Microsoft ne produit évidemment que du code natif Windows, mais les spécifications étant disponibles, il s'est trouvé un groupe de personnes ayant décidé de porter .NET sur Linux, donnant naissance à la plate-forme de développement libre Mono.

b. Bibliothèques de classes .NET

Il y a trois couches au dessus du CLR, chacune comportant des classes apportant des fonctionnalités de plus en plus évoluées.

Ø Base Class Library

Dans la première couche se trouve la BCL, rassemblant des classes permettant les manipulations de chaînes de texte, la gestion des entrées/sorties, des communications réseaux, des threads et le design des interfaces utilisateur. Ces classes sont similaires à celles présentes dans l'API Java développée par Sun. Par exemple, la manipulation des chaînes est disponible dans la classe String, dans les deux langages; la différence étant qu'en Java il n'existe pas de type de base pour manipuler les chaînes (on manipule des objets 'String'), alors qu'en .NET, le type string (avec un 's' minuscule) a spécifiquement été défini.

Ø Data and XML Classes

La deuxième couche est composée de deux bibliothèques de classes d'accès aux données. Tout d'abord, ADO.NET, s'élevant sur les bases de l'ancien ADO (ActiveX Data Objects) utilisé par les développeurs ASP, et permettant l'accès sous format XML aux interfaces de bases de données SQL Server, ODBC, OLE DB, Oracle et Sybase, et bien sûr aux fichiers XML. Les XML Classes permettent de manipuler les données XML. On y trouve par exemple les classes XSLT permettant la transformation d'un document XML vers n'importe quel type d'autre document. Un autre exemple, il est très facile de charger un document XML dans une table, et vice versa, grâce au XML sous-jacent.

Ø XML Web Services, Web Forms, Windows Forms

La dernière couche, la plus élevée, est utilisée pour la création de Web Services, de pages Web, et d'applications Windows. Les deux premiers forment ASP.NET, là aussi une référence à l'ancien langage de programmation Web. Lorsque vous visitez des sites Internet, vous pouvez remarquer les pages se terminant par .aspx qui sont des pages Web écrites en .NET, tandis que les pages écrites en ASP se terminent en .asp (pour s'amuser on peut très bien modifier les configurations du serveur IIS de Microsoft pour modifier l'extension des fichiers ASP.NET alors que ce n'est pas une généralité).

Ø Structure d'une application .NET

L'unité de base d'une application .NET est appelée un assemblage (assembly). Il s'agit d'un ensemble de code, de ressources et de métadonnées. Un assemblage est toujours accompagné par un manifeste (assembly manifest) qui décrit ce qu'il contient : nom, version, types de données exposées, autres assemblages utilisés, instructions de sécurité. Un assemblage est composé de un ou plusieurs modules qui contiennent le code.

Ø Compilation et exécution d'une application .NET

Tout comme avec java, quand une application .NET est compilée, elle n'est pas compilée en code binaire machine, mais dans un code binaire intermédiaire MSIL. Une application consiste donc en un ensemble d'assemblages contenus dans un ou plusieurs fichiers exécutables ou fichiers DLL en MSIL. Au moins un de ces assemblages doit contenir un point d'entrée afin de démarrer l'application.

Quand l'exécution d'un programme démarre, le premier assemblage est chargé en mémoire. Le CLR commence par examiner les permissions demandées par cet assemblage et les compare à la politique de sécurité (security policy) du système. Puis, si l'assemblage est autorisé à s'exécuter, un processus est créé pour exécuter l'application. Le premier morceau de code nécessaire à l'exécution est chargé en mémoire et est compilé en code binaire natif par le compilateur JIT (Just-In-Time, juste à temps). Une fois compilé, le code est exécuté et stocké en mémoire sous forme de code natif, garantissant ainsi que chaque portion de code n'est compilée qu'une seule fois lors de l'exécution de l'application..

Ø .NET 3.0

Cette version du Framework inclut Windows Workflow Foundation ( WF), Windows Communication Foundation ( WCF), Windows Presentation Foundation ( WPF) et Windows CardSpace. WinFX est l'ancien nom du projet de développement de Microsoft pour son nouveau système d'exploitation .NET Framework 3.0. WinFX est le nom du modèle de développement intégré à Vista. Bien que servant de base à tous les développeurs qui veulent créer une application sur Vista, WinFX sera également disponible pour Windows XP et Server 2003, avec toutefois certains raffinements en moins. En fait, WinFX est désormais renommé pour mieux refléter son héritage, à savoir Framework .NET 3.0. Contrairement aux deux versions précédentes, cette troisième version inclut bien plus d'éléments :

· Windows Presentation Foundation, anciennement Avalon

· Windows Communication Foundation, anciennement nommé Indigo

· Windows Workflow Foundation

· CardSpace, anciennement nommé InfoCard

Le nouvel environnement inclut bien entendu également les autres éléments du Framework .NET, à savoir :

Le CLR (Common Language Runtime) , ASP.NET , WinForms, ADO.NET

Ø .NET 3.5

La version 3.5 du Framework inclut le Framework LINQ (Language INtegrated Query) permettant des requêtes objet aussi bien sur des Data, des Collections, du Xml ou des DataSets. Elle intègre également le Framework Ajax.Net avec de nouveaux protocoles ( AJAX, JSON, REST, RSS, ATOM) et d'autres standards WS.

En conclusion, le .Net est une plateforme uniformisée et à vocation universelle. Elle facilite "nettement" le développement d'applications pour ceux qui maîtrisent la POO, proposant une hiérarchie d'objets ainsi qu'une harmonisation générale des API. Mais les programmes générés exigent des ordinateurs dotés d'une surcouche logicielle et donc devant être de plus en plus puissants.

2. Le langage

Plusieurs langages étant disponibles dans notre programme de cette année on choisi un des langages de la suite Visual Studio 2008 qui comporte des langages tels que le C# (mélange de C++ et de Java), le J# (proche du Java, mais non compatible Java) et le Visual Basic .NET. On a opté pour C# car il est moderne et est un mélange de C++ et de JAVA et est un langage de dernière génération. Grâce à la disponibilité des spécifications techniques, différents acteurs sont libres d'ajouter le support pour un autre langage. Il existe aussi des implémentations libres de dot net, notamment Mono et DotGNU.

Le C# facilite la tâche des développeurs en proposant une approche unifiée à la conception d'applications Windows ou Web, tout en introduisant des facilités pour le développement, le déploiement et la maintenance d'applications.

3. Méthodes spéciales utilisées

 
Les méthodes délégués (delegates en anglais) sont une des spécificités de C# par rapport à Java : le mot-clé delegate offre la possibilité de créer des classes particulières, appelées "délégations", dont les instances sont nommées "délégués". Ces classes permettent d'établir un contrat entre l'émetteur et le récepteur - en cela, elles sont proches des interfaces, sauf qu'un délégué n'établit son contrat qu'avec une méthode de la classe déléguée.

 

Que sont-ce, donc, les délégués ? Ils sont définis comme des pointeurs de fonction orientés objet et sans restriction de type (type-safe). Plus simplement, ils sont souvent utilisés comme base de la gestion d'événement au sein de .NET, car ils facilitent l'enregistrement d'un événement. Ils mettent en place un système de rappel (callback) beaucoup plus sécurisé, indiquant à une fonction de référer à une autre. Plus que de simples pointeurs de fonction, ils permettent de préciser le nombre d'arguments à prendre en compte, et le type de chacun, ainsi que le type de valeur retournée et les conventions d'appel.

Les délégués sont des méthodes appelables sans connaissance préalable de l'objet cible. Lors de la création d'un événement, l'émetteur ne peut pas forcément connaître l'objet/la méthode qui va gérer son événement. Les délégués permettent de prendre en charge ce rôle d'intermédiaire. Ils offrent aux développeurs une méthode de dialogue entre objets, en permettant de fournir en paramètre une fonction de même signature pour déléguer l'exécution d'un morceau de code. Les délégués sont ainsi très utilisés au sein de .NET, dans les cas où un composant doit rappeler le composant qui l'utilise.

L'intérêt n'est pas forcément visible : au premier regard, on pourrait comprendre que les délégués permettent d'appeler une fonction à la place d'une autre, ce qui peut laisser sceptique. Les délégués répondent pourtant à un besoin précis : prévoir dans le code d'appeler une méthode, sans savoir lors de la phase de programmation quelle sera cette méthode, celle-ci n'étant précisée que lorsque le programme est lancé. Par exemple, on peut avoir besoin de lancer un tri, mais ne pas être en mesure de déterminer le type de tri (Bulle, Quick, Merge...) avant que l'application ne tourne. L'idée est que ce n'est plus l'objet initial qui gère l'activité, il peut la déléguer à une autre fonction qui prend en charge l'ensemble du processus (c'est la délégation asynchrone).

Au sein du code C#, il faut commencer par établir un type délégation (via le mot-clef delegate), en précisant bien les arguments que la fonction déléguée doit accepter. Il suffit ensuite de créer un objet du type créé, en indiquant la fonction utilisée. Cette fonction est dès lors disponible via le délégué. On peut comparer un délégué à une interface ne déclarant qu'une méthode.

Notre application possède à son sein des méthodes déléguées qui sont très importantes.

II. PRINCIPE DE L'ARCHITECTURE CLIENT-SERVEUR

1. Architecture d'un client

L'architecture d'un programme réseau demandant les services d'une application serveur sera la suivante :

ouvrir la connexion avec le service jeu de la machine « serveur »

si réussite alors

tant que ce n'est pas fini

préparer une demande

l'émettre vers la machine « serveur »

attendre et récupérer la réponse

la traiter

fin tant que

finsi

fermer la connexion

2. Architecture d'un serveur

L'architecture d'un programme offrant des services sera la suivante :

ouvrir le service sur la machine locale

tant que le service est ouvert

se mettre à l'écoute des demandes de connexion sur un port dit port d'écoute

lorsqu'il y a une demande, la faire traiter par une autre tâche sur un autre port dit port de service

fin tant que

3. Quelques classes

Le framework .NET offre différentes classes pour travailler avec le réseau :


· la classe Socket est celle qui opère le plus près du réseau. Elle permet de gérer finement la connexion réseau. Le terme socket désigne une prise de courant. Le terme a été étendu pour désigner une prise de réseau logicielle. Dans une communication TCP-IP entre deux machines A et B, ce sont deux sockets qui communiquent entre eux. Une application peut travailler directement avec les sockets. C'est le cas de l'application A ci-dessus. Un socket peut être un socket client ou serveur.

Si on souhaite travailler à un niveau moins fin que celui de la classe Socket, on pourra utiliser les classes :

· TcpClient pour créer un client Tcp,

· TcpListener pour créer un serveur Tcp.

Ces deux classes offrent à l'application qui les utilisent, une vue plus simple de la communication réseau en gérant pour elle les détails techniques de gestion des sockets.

.NET offre des classes spécifiques à certains protocoles :

· La classe SmtpClient pour gérer le protocole SMTP de communication avec un serveur SMTP d'envoi de courriers électroniques

· La classe WebClient pour gérer les protocoles HTTP ou FTP de communication avec un serveur web.

On retiendra que la classe Socket est suffisant en elle-même pour gérer toute communication TCP/IP mais on cherchera avant tout à utiliser les classes de plus haut niveau afin de faciliter l'écriture de l'application TCP/IP.

a. La classe TcpClient

La classe TcpClient est la classe qui convient dans la plupart des cas pour créer le client d'un service TCP. Elle a parmi ses constructeurs C, méthodes M et propriétés P, les suivants :

TcpClient(string hostname, int port) => C : crée une liaison tcp avec le service opérant sur le port indiqué (port) de la machine indiquée (hostname). Par exemple new TcpClient("istia.univ-angers.fr",80) pour se connecter au port 80 de la machine istia.univ-angers.fr

Socket Client => P : le socket utilisé par le client pour communiquer avec le serveur.

NetworkStream GetStream() => M : obtient un flux de lecture et d'écriture vers le serveur. C'est ce flux qui permet les échanges client-serveur.

void Close() => M : ferme la connexion. Le socket et le flux NetworkStream sont également fermés.

bool Connected() => P : vrai si la connexion a été établie.

b. La classe NetworkStream

La classe NetworkStream représente le flux réseau entre le client et le serveur. Elle est dérivée de la classe Stream. Beaucoup d'applications client-serveur échangent des lignes de texte terminées par les caractères de fin de ligne "\r\n". Aussi est-il intéressant d'utiliser des objets StreamReader et StreamWriter pour lire et écrire ces lignes dans le flux réseau.

c. La classe TcpListener

La classe TcpListener est la classe qui convient dans la plupart des cas pour créer un service TCP. Elle a parmi ses constructeurs C, méthodes M et propriétés P, les suivants :

· TcpListener (int port) => C : crée un service TCP qui va attendre (listen) les demandes des clients sur un port passé en paramètre (port) appelé port d'écoute. Si la machine est connectée à plusieurs réseaux IP, le service écoute sur chacun des réseaux.

· TcpListener (IPAddress ip, int port) => C : idem mais l'écoute n'a lieu que sur l'adresse ip précisée.

· void Start() => M : lance l'écoute des demandes clients

· TcpClient AcceptTcpClient() => M : accepte la demande d'un client. Ouvre alors une nouvelle connexion avec celui-ci, appelée connexion de service. Le port utilisé côté serveur est aléatoire et choisi par le système. On l'appelle le port de service. AcceptTcpClient rend comme résultat l'objet TcpClient associé côté serveur à la connexion de service.

· void Stop() => M arrête d'écouter les demandes clients

· Socket Server => P le socket d'écoute du serveur.

III. ANALYSE ET MODELISATION UML

1. Diagramme Use case de l'application

Figure 1: Diagramme de cas d'utilisation

2. Diagramme de séquence de la connexion au serveur

Figure 2 : Diagramme de la connexion client vers serveur

3. Diagramme de séquence du jeu

Figure 3 : Diagramme de séquence du déroulement du jeu

B. L'APPLICATION SERVEUR

L'application serveur est le chef d'orchestre, fournisseur du jeu d'échecs et aussi l'aiguilleur des informations provenant d'un client vers un autre. Dans cette application nous nous sommes beaucoup investi dans l'utilisation des threads.

L'application est dotée d'un fichier d'aide de dernière génération (.chm) aussi explicite que complet.

C'est un assez gros logiciel vu sa composition mais moins impressionnant que le client.

Notre application Serveur possède au total :

v 8 Classes d'objets,

v 40 Méthodes ou Fonctions,

v 1 Méthode Déléguée,

v 4 winForms qui sont l'interface principale, celle de la configuration, de l'Apropos de, et de l'outil de résolution DNS qu'on a ajouté pour aider l'administrateur dans ses différentes recherches.

I. Architecture du Serveur

Architecture structurée et représentée dans cette image ci - dessous.

Figure 1 : Architecture de l'application Serveur

II. Les principales Classes, Méthodes et leurs rôles

1. Les principales classes

Figure 1 : Les principales classes de l'application Serveur

La classe Program : C'est le point d'entrée principale de l'application.

La classe Server_Form : Classe/Formulaire principal du Serveur Initialise une classe Serveur et la commande suivant l'appui sur les différents boutons / controles du formulaire.

La classe Server : Classe gérée par le formulaire "Form_Server". Elle gère tous les échanges TCP avec les clients et l'attente par les "TCPListener".

La classe Clients : Classe représentant un client du serveur Contient les infos réseaux (TCPCLIENT, STREAMWRITER) mais aussi le pseudo.

La classe UpdateArgs : Classe représentant les paramètres lors de la génération d'un événement CoDeco ( classe Serveur )ou d'un événement Update( modification de la liste des clients) (classe Lanceur_Thread).

La classe Lanceur_thread : Classe gérant l'appel d'un Thread avec des paramètres, contient la liste des clients connectés au serveur et le client courant.

2. Les méthodes de la classe Server

La méthode actualisation_infos() : Gère l'actualisation des données, la liste de tous les clients du serveur à tous les clients. En cas lors d'un envoi, le client est déconnecté ( une déconnexion génère un événement dans le but de l'afficher sur le formulaire ).

La méthode ecoute_canal_data() : Méthode d'écoute sur le port DATA Attends un client, puis créé un thread qui va s'occuper de cette connexion DATA.

La méthode ecoute_canal_infos() : Méthode d'écoute sur le port attend un client, puis créé un thread qui va s'occuper de cette connexion INFOS ( Vérifie aussi le nombre de clients maximum, renvoie un événement lors d'une connexion ).

La méthode server() : Constructeur Créer les TcpListener sur les deux ports ( infos et communication pour les parties ).

La méthode my_thread_update() : Méthode appelée au début de l'échange un client permet de renseigner les infos provenant du clients dans la liste des clients du Serveur de type List.

La méthode infos() : Renvoie une chaîne contenant toutes les infos des clients actuellement connectés, chaine contenant les infos de tous les clients ( nom, ip, port client, id ).

La méthode stats() : Renvoie une chaine contenant les stats du serveur, nombre de clients, nombre de clients max, Version de l'OS, Nom de la machine Utilisation Mémoire, Nom de l'utilisateur en cours, Les ports utilisés.

La méthode stop() : Arrête l'instance de la classe Serveur ( les TcpListeners, les threads, déco de tous les clients, ... ).

La méthode start() : Méthode démarrant le serveur ( appelée par le formualaire ), réussite du démarrage du serveur ( true or false )

L'evenement codecoclient : Evénement lancé lors de la connexion/déconnexion d'un client permet la mise a jour du coté formulaire du serveur.

3. Les méthodes de la classe Lanceur_thread

La méthode gerer_client_data() : Gère les clients sur le port DATA attends une info provenant du client qui vient d'ouvrir une connexion DATA puis retransmets l'information au correspondant à l'en-tête du pseudo protocole ( encapsulation ) (défini sur le client), s'il y a une erreur ou que le client cible n'existe pas, on coupe la connexion sur ce port.

La méthode gerer_client_infos() : Gère le début d'une comunication sur le port INFOS ( passage du pseudo du client ) puis actualise le paramètre dans la liste des clients.

La méthode Lanceur_thread() : Constructeur, initialise la classe en fonction des paramètres Client Courant et Liste des clients.

L'événement update : événement généré après avoir récupéré le pseudo pour actualiser le nom dans la liste des clients.

4. Les méthodes de la classe Server_form

La méthode ajouterlog() : Méthode appelée par le délégué du même nom affiche le paramètre (Chaine à afficher dans les logs) dans la fenêtre du journal.

La méthode Serveur_CoDecoClient() : Récupère la Connexion / Déconnexion d'un client à partir de l'événement CoDecoclient de la classe Server et modifie le texte de log en conséquence.

La méthode update_form_co() : modifie l'aspect graphique après la

connexion ( mets en état connecté ).

La méthode update_form_deco() : modifie l'aspect graphique après la déconnexion ( mets en état déconnecté).

III. Les Interfaces du logiciel Serveur

Concernant la partie visible de notre application, celle-ci dispose d'une très jolie interface très conviviale lookée au style vista glass conçu grâce au logiciel de traitement d'image Adobe PhotoShop version CS3 Extended. Notre application est aussi dotée d'un fichier d'aide bien détaillé sur son utilisation et le copyright.

Sur l'interface principale (fig. 1) on s'aperçoit que beaucoup d'informations comme l'heure, la date, l'adresse IP de la machine hôte et l'état du serveur sont directement affichées. La zone de texte au centre sert à afficher le journal de fonctionnement et des événements qui se déroulent comme la connexion et la déconnection d'un client, les informations sur les clients, les statistiques détaillés sur le système d'exploitation installé et les connectés. Cela rend l'utilisation facile.

Nous avons incorporé aussi un outil spécial de résolution DNS nommé My OUS-IP .Net (fig. 7 et 8) qui fait la résolution DNS dans les deux sens c'est-à-dire IP -> Nom et Nom -> IP.

Voici les interfaces dont est constituée notre application Serveur :

Figure 1 : Fenêtre principale initiale

Figure 2 : Fenêtre principale « serveur démarré »

Figure 3 : Fenêtre principale « serveur arrêté »

Figure 4 : Fenêtre principale « Statistiques  et infos»

Figure 5 : Fenêtre de configuration ou préférences

Figure 6 : Menu contextuelle dans le systray

Figure 7 : Fenêtre de l'outil de résolution DNS

Figure 8 : Fenêtre de l'outil de résolution DNS en exécution

C. L'APPLICATION CLIENTE

L'application cliente est en fait l'application qui permet de jouer au jeu d'échecs en se connectant au serveur de jeu. C'est donc sur cette application que le jeu se déroule. Dès votre connexion vous verrez les différents joueurs connectés et il vous suffit de double-cliquez pour lui demander de jouer avec vous. Si c'est un joueur distant avec lequel vous jouez via le net il faudra une connexion ADSL avec un débit minimal de 256 Kbits car le flux de donnée est important. Notre application Cliente possède un total de :

v 13 Classes d'objets,

v 71 Méthodes ou Fonctions,

v 5 Méthodes Déléguées,

v 4 winForms qui sont l'interface principale, celle de la configuration, de l'Apropos de, et du jeu qu'on a ajouté pour aider l'administrateur dans ses différentes recherches.

I. Architecture du Client

Figure 1 : Architecture de l'application Cliente

II. Les principales Classes, Méthodes et leurs Rôles

1. Les principales classes

Figure 1 : Les principales classes de l'application Cliente

La classe Program : c'est le point d'entrée principale de l'application.

La classe Form_client : Classe/Formualaire réprésentant le formulaire de base de l'application cliente. Gère l'aspect de la connexion au serveur.

La classe Form_Game : Portion de la classe/Formulaire Form_Game relative au chat et fonctions générales du formulaire et Partie de la classe Form_Game gérant le jeu d'échecs en lui-même.

La classe MyPictureBox : Classe réprésentant une case de l'échiquier gère le deplacement des pions.

La classe MyPictureBoxEventArgs : Classe d'arguments pour l'évenement MyClick contient 2 attributs entiers.

La classe MyStreamWriter : Classe relative au pseudo-protocole utilisé lors des parties Ecriture permet une encapsulation des données pour identifier la partie en cours à la réception.

La classe MyStreamReader : Classe relative au pseudo-protocole utilisé lors des parties Lecture permet une sélection des informations à traiter et une désencapsulation.

La classe Lanceur_Thread : Classe servant de conteneur pour lancer des threads en prenant en compte des arguments ( ceux du constructeur de classe ) PS : un méthode threadée ne peut pas prendre en compte d'arguments.

La classe Connexion_serveur : Classe gérant la Partie Réseau et les échanges avec le serveur : en particulier l'actualisation des joueurs présents sur le serveur.

La classe ActuArgs : Classe d'arguments utilisés par l'événement actualisation.

2. Les méthodes de la classe Form_Game

La méthode Actualisation(): Méthode Actualisation lancée dans un Thread elle permet la réception des données du joueur distant et leurs répartition suivant le type (texte, "exit" ou mouvement).

La méthode box_MyClick(): Méthode qui gère les différents clic sur les MyPictureBox : arguments avec les coordonnées de la Box.

La méthode créer_echequier(): Fonction qui créer les PictureBox liées à l'échiquier et les paramètrent.

La méthode deplacer():Fonction effectuant les déplacements.

La méthode regle():Vérifie les règles en faisant appel à des fonctions spécifiques pour chaque type de pièce.

La méthode grenier():Fonction qui mets dans le grenier les pièces mangées.

La méthode Methode_Deplace_Advers(): Fonction appelée quand on reçoit un déplacement paramètre « coup reçu ».

3. Les méthodes de la classe Form_Client

La méthode Actu_methode(): Méthode appelée par le délégué Actu modifie des infos graphiques.

La méthode Deco_Methode(): Méthode appelée par le délégué Déco Modifie des infos graphiques.

La méthode Server_actu(): Méthode appelée sur l'événement Actu nécessite l'utilisation d'un délégué.

La méthode Server_deco(): Méthode appelée sur l'événement Deco nécessite l'utilisation d'un délégué.

La méthode listView1_ItemActivate(): Méthode lancée lorsque l'on double clique sur un joueur de la liste et qu'on veut ainsi jouer avec lui. Initialise tout le nécessaire et lance un formulaire Form_Game. On se connecte en DATA au serveur si la connexion a réussie on extrait l'endpoint des infos affichées sur dans la listview puis on envoie la demande de partie.

4. Les méthodes de la classe Connexion_Serveur

La méthode attente_actu(): Méthode Threadée attends les infos venant du serveur Fait le tri entre actualisation et infos relatives aux parties lancées.

La méthode Connect(): Connecte le client au Serveur suivant les paramètres donnés : IP du Serveur, Port utilisé pour l'actu, Port sur lequel on se connecte pour les parties, Nom d'utilisateur local (pour s'authentifier sur le serveur) et retourne « Connexion Réussie ou pas ».

La méthode Disconnect(): Méthode appelée par le bouton Disconnect et déconnecte le client.

L'évènement actu : Evénements lancé par la classe lorsque l'on recoit une actualisation des personnes présentes sur le Serveur.

L'évènement deco : Evénements lancé par la classe lorsque le dialogue avec le serveur est coupé Permet de gérer l'affichage du statut.

5. Les méthodes de la classe Lanceur_Thread

La méthode Parse_reception_data() : Méthode gérant toutes les données de parties. L'info recu commence par "CTC", Voir la classe MyStreamWriter pour le format exact du pseudo-protocole utilisé, Gère les différents messages possibles de ce pseudo-protocole, Si c'est une demande de partie, on initialise et on crée un nouveau, formulaire Form_Game.

6. Les méthodes de la classe MyStreamWriter

La méthode WriteLine(): Méthode surchargée de Writeline permet d'encapsuler l'information à envoyer dans un "protocole" définit pour ce jeu définissant émétteur et récepteur de l'info Chaine à envoyer Retourne si l'envoi à réussi.

7. Les méthodes de la classe MyStreamReader

La méthode ReadLine():Méthode bloquante retournant la première infos recus venant de l'endpoint correspondant à l'endpoint de l'objet. Teste parmi toutes les infos recues sur ce canal ce qui est destiné au Form_Game propriétaire de l'instance de ce MyStreamReader renvoi "Errno" sur déconnexion (under dev). Il retourne la chaine recue et désencapsulée.

La méthode Create(): Fonction statique d'initialisation de la classe.

La méthode Update(): Fonction Actualisant les infos reçues Appelé dès que l'on reçoit une ligne qui n'est pas de l'actu et qui commence par "CTC" ( client to client ). Paramètre : nouvelle info.

III. Les Interfaces du logiciel Client

Concernant la partie visible de cette partie de notre application, celle-ci dispose aussi d'une très jolie interface très conviviale lookée au style vista glass conçu grâce au logiciel de traitement d'image Adobe PhotoShop version CS3 Extended. Cette application est aussi dotée d'un fichier d'aide bien détaillé sur son utilisation avec la règle du jeu des échecs pour ceux qui ne savent pas y jouer et contient aussi le copyright du concepteur.

Sur la l'interface principale (fig. 1) on s'aperçoit que des informations comme le pseudo du connecté, les joueurs en ligne et l'état de connexion du joueur sont directement affichées. La zone de texte au centre sert à afficher les joueurs connectés. Cela rend l'utilisation et la demande de jeu faciles.

Voici les interfaces dont est constitué notre application Cliente :

Figure 1 : Interface principale « Mode non-Connecté »

Figure 2 : Interface principale « Mode connecté »

Figure 3 : Interface de réglage de préférence

Figure 4 : Interface de jeu et du chat

D. L'INSTALLATION DU LOGICIEL

Figure 1 : Installation - début

Figure 2 : Choix du type de logiciel à installer : Serveur ou Player

TROISIEME PARTIE - Suggestions et Améliorations possibles

TROISIEME PARTIE

AMELIORATIONS POSSIBLES

Un logiciel n'étant jamais vraiment terminé peu a tout moment subir des améliorations. C'est pour cela on rencontre un logiciel qui sort et après on fait sortir une autre version plus évolué et amélioré que le précédent.

Notre application est la version 1.0, alors les générations futures peuvent améliorer et produire la version 2.0 qui pourra peu être avoir comme amélioration :

Ø La gestion des joueurs par une base de données légère,

Ø L'archivage des scores lors des jeux,

Ø La classification et la consultation des meilleurs scores,

Ø L'amélioration de la beauté de l'interface au fil des ans,

Ø L'ajout d'outils nouveaux,

Ø Amélioration de la qualité d'envois et réceptions des données,

Ø Une meilleure optimisation du produit,

Ø Concevoir un serveur plus puissant et optimisé,

Ø Ou carrément amélioration le code source !

Ceci étant un des objectifs poursuivis en matière de partage de connaissance que nous voulons atteindre. Il n'est plus un secret pour personne que le rendement optimal recherché pour une application requiert une collaboration ou une aide plus ou moins prompt de plusieurs personnes.

Conclusion

Ces nombreuses années de théories suivies de pratique et appuyer par les Ateliers de Formations Professionnelles et couronnées d'un diplôme de Master (Bac+4) nous a donné l'opportunité de découvrir le milieu professionnel plein de surprise d'une part, et de nous familiariser avec notre futur métier d'Ingénieur Concepteur en informatique d'autre part. Ces années ont été l'occasion pour nous de confronter nos connaissances à la pratique et d'acquérir une expérience d'un sens professionnel.

Quant à notre thème de mémoire, il nous a permis d'abord une connaissance sur le fonctionnement d'une application réseau ou client-serveur et de la complexité des méthodes qui peuvent intervenir dans cette application, ensuite de nous familiariser à toute la nouvelle technologie et la puissance dont dispose la suite de logiciel « Visual Studio 2008 Entreprise Edition » et la plateforme Framework .Net qui marque incontestablement l'évolution des langages ainsi que l'aisance de la programmation.

Le futur ingénieur plein d'expérience que nous seront, devra disposer de patience, de dynamisme, de courage, de persévérance et surtout de créativité compte tenu du fait que la technologies développe de façon exponentielle, on doit de temps à autre suivre des formations et se mettre à jour continuellement afin de s'imprégner des nouvelles technologies de pointe.

Au terme de notre étude, nous retiendrons sans doute que les applications réseau sont très importants, beaucoup utilisées pour les échanges entre deux hôtes et surtout bénéficie d'un réel développement. C'est l'un des domaines les plus indispensables et les plus évolutives en matière d'informatique. Elle est incontournable car de nos jours, le développement et la complexité des échanges via le web en passant par le développement de la toile et la division des bases de données (Base de données reparties) est une réalité. Par conséquent l'étude dans le but de créer une telle application réseau nous a été très bénéfique.

Notre formation reçue au groupe SUP'MANAGEMENT, le suivi soutenu de notre travail et notre expérience pratique lors des Ateliers de Formations Professionnelles et les stages nous permettront d'embrasser avec aise, nous l'espérons, notre métier d'Ingénieur.

Wébographie

o http://www.coupdepouce.com

o http://www.commentcamarche.net

o http://www.wikipedia.org

o http://dotnet.developpez.com/cours/?page=csharp

o http://www.commentcamarche.net/forum/

o http://tahe.developpez.com/dotnet/csharp/

o http://alain.vizzini.free.fr/coursidxsharp.html

o http://alain.vizzini.free.fr/coursidxcode.html

o http://discala.univ-tours.fr/livres/LivreBases.html

o http://www.labo-dotnet.com/Accueil/default.aspx

Bibliographie

o Les Threads en C# - Réseau Tech Note Collection Edition ENI

o Programmer en C# Collection Les TP Informatiques Edition ENI

o L'informatique et Programmation Robert Michel Di Scala Berti Edition






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"L'imagination est plus importante que le savoir"   Albert Einstein