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 |
DEUXIEME PARTIE -- Etude du thèmeDEUXIEME PARTIE ETUDE DU THEME : SERVEUR DE JEU D'ECHECS EN RESEAU A. PRESENTATION DES OUTILS DE L'APPLICATIONNotre é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 PLATEFORME1. La plateformeOn 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). Ø 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 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). 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. 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. 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.. 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 · 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 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. |
|