Shared Card Game
Une application Client/Serveur basée sur un service WCF duplex


En deux mots:

SharedCardGame.exe est un programme de démo montrant l'efficacité des services .Net WCF duplex utilisant une liaison net.tcp.

Je l'ai développé à titre d'exercice personnel pour mettre en pratique la programmation d'un service WCF .Net avec C#.

Téléchergement du client WCF SharedCardGame:

Vous pouvez télécharger l'application client Windows SharedCardGame ici (SharedCardGame_Client.zip). (Assurez-vous de régulièrement la mettre à jour avec la dernière version, ce logiciel est un prototype et est toujours en développement. Je modifie donc souvent le serveur ou le client. Ils doivent tous les deux correspondre pour fonctionner.)

Décompressez simplement les fichiers du client et lancez le programme SharedCardGame.exe. (Attention: le fichier SharedCardGame.exe.config doit rester dans le même répertoire que le fichier exécutable SharedCardGame.exe. Ne modifiez pas ce fichier de configuration.)

Explications générales:

SharedCardGame.exe est en fait une application Windows .Net (Winform) constituant le client d'un service WCF duplex que j'ai développé et qui est hébergé sur un serveur IIS 7 sur un serveur localisé à l'adresse www.raptordev.ch

Note:Le Framework .Net 4.5 ou supérieur est requis sur l'ordinateur Windows exécutant cette application. Si il n'est pas déjà installé sur votre PC Windows (Il devrait déjà l'être si vous utilisez Windows 8), vous pouvez le télécharger sur https://www.microsoft.com/fr-fr/download/details.aspx?id=30653

Cette application client/serveur répartie constitue un environnement collaboratif en émulant un ensemble de cartes à jouer sur une surface de jeu virtuelle. Plusieurs joueurs situés à divers emplacements peuvent exécuter l'application client pour jouer ensemble avec un ensemble de cartes à jouer.

Tous les joueurs exécutant l'application client SharedCardGame voient la même surface de jeu et peuvent manipuler les cartes à jouer comme un véritable jeu de cartes si ils étaient assis tous ensemble autour de la même table. Toutes les applications client des joueurs communiquent avec le service WCF duplex hébergé sur le serveur situé à www.raptordev.ch. Le service WCF gère l'état de l'environnement partagé et reporte les changements de cet état de l'environnement à chacun des clients connectés. Ainsi, tous les clients connectés voient toujours l'état identique exact de l'environnement de jeu. (A l'exception de la face visible de leurs cartes privées que naturellement chaque joueur est le seul à voir.)

Les joueurs peuvent déplacer les cartes en cliquant sur elles (avec le bouton gauche de la souris) et en les glissant jusqu'à leur nouvel emplacement. (Encore une fois à l'exception des cartes situées dans la zone privée d'un autre joueur, qu'il n'est pas possible de déplacer).

Ils peuvent aussi les retourner en cliquant sur elles avec le bouton droit de la souris.

Ils peuvent également les rassembler pour former un paquet de cartes en glissant une carte (ou un paquet de cartes) sur une autre carte (ou paquet de cartes). La carte ou le paquet déplacé sera incorporé au sommet de la carte ou paquet de cartes cible pour constituer un nouveau paquet de cartes unique. L'ordre et l'orientation (face visible ou cachée) des cartes insérées sur le nouveau paquet ne sera pas modifié.

Ils peuvent enfin rassembler un ensemble de cartes ou paquets de cartes situés dans une région rectangulaire de l'aire de jeu en cliquant (bouton gauche) sur le fond de l'aire de jeu et en déplaçant ensuite la souris sans relâcher le bouton afin de délimiter une zone rectangulaire. Quand le bouton gauche de la souris est relâché, toutes les cartes ou paquets de cartes entièrement situés dans la zone de rassemblement sélectionnée sont rassemblées en un seul paquet (toutes face dessous).

Pour agir sur un paquet de cartes, les joueurs peuvent ouvrir un menu contextuel en cliquant avec le bouton droit de la souris sur un paquet de cartes.

Le menu contextuel de paquet de cartes offre les commandes suivantes:

- "Extraire la première carte du paquet": fait apparaître la première carte du paquet comme un carte séparée isolée.

- "Compter les cartes du paquet": affiche le nombre de cartes contenues dans le paquet.

- "Mélanger le paquet": Mélange les cartes du paquet.

- "Distribuer les cartes du paquet": (Cette fonction n'est pas encore implémentée).

Tous les mouvements/retournements/rassemblements des cartes sont reportés par le service WCF à chaque client/joueur de manière synchrone.

Par ailleurs, chaque joueur dispose de sa propre zone privée qu'il (et seulement lui) peut placer à l'emplacement qu'il a choisi autour de la zone de jeu. Les cartes placées entièrement à l'intérieur de cette zone privée sont vues "retournées" uniquement par le propriétaire de cette zone privée et ne peuvent y être saisies ou déplacées que par lui-même exclusivement.

La zone privée est donc l'endroit ou chaque joueur placera ses "cartes privées" c'est à dire les cartes de sa "main".

Enfin, une fenêtre de "chat" (babillage) permet aux joueurs de communiquer entre eux.

Mode d'emploi:

- Assurez-vous que le service WCF (http://raptordev.ch/ScgBroadcastorService/Service.svc)est actif sur le serveur (il devrait normalement l'être en permanence) et que vous disposez de la dernière version du logiciel client SharedCardGame.exe (Vous pouvez contrôler l'URL suivant avec votre navigateur: http://raptordev.ch/ScgBroadcastorService/Service.svc il devrait afficher une page de description du service ScgBroadcastorService (en anglais) avec deux liens vers le document wsdl (un document au format xml) qui décrit le service WCF exposé).

- Assurez-vous que les requêtes TCP sortantes ne sont pas bloquées par votre pare-feu externe/d'entreprise. (car le service WCF du serveur utilisant une liaison de type net.tcp, il est nécessaire que le client puisse envoyer des requêtes TCP. Cela devrait être en ordre avec la plupart des fournisseurs d'accès internet (ISP) mais cela peut ne pas être possible depuis le réseau local d'entreprises dont le pare-feu externe implémente une politique de sécurité restrictive.

- Lancez l'application client SharedCardGame.exe.

- Saisissez votre nom ou pseudonyme de joueur et cliquez sur le bouton "Register player" (enregistrer le joueur). Si la table n'est pas complète (10 joueurs max) et que votre nom ou pseudo n'est pas déjà utilisé par un autre joueur en jeu, les cartes vont apparaitre selon l'état du jeu en cours, ainsi que votre zone privée qui apparaîtra dans l'angle supérieur gauche.

- Déplacez votre zone privée à l'emplacement de votre choix autour de la zone de jeu. (Ne laissez pas votre zone privée dans l'angle supérieur gauche car d'autres nouveaux joueurs peuvent apparaître à cet emplacement à tout moment !)

- D'autres nouveaux joueurs peuvent rejoindre la table à tout moment durant le jeu. (Mais ils seront limités à 10 joueurs au maximum).

- Déplacez et retournez les cartes comme de vraies cartes si vous étiez ensemble autour d'une table de jeu, selon les règles du jeu auquel vous voulez jouer... N'oubliez pas qu'il ne s'agit que d'une surface de jeu virtuelle et partagée ! Aucune règle de jeu particulière ne sont implémentées et contrôlées par cette application. Pas plus qu'une table et un paquet de cartes de déterminent et contrôlent les règles du jeu auquel vous jouez ! Elle ne fait qu'émuler un paquet de 52 cartes et le partager à travers le net pour permettre à plusieurs joueurs distants de jouer ensemble au jeu de cartes de leur choix ! La seule règle que le serveur arbitre, c'est d'assurer qu'un seul joueur à la fois ne peut manipule une carte ou un paquet de cartes. Le premier qui l'a saisi(e) le/la garde jusqu'à ce qu'il le/la relâche ! Il n'est pas possible d'arracher une carte des mains d'un autre joueur !) Le serveur assure aussi que personne d'autre que vous ne voit la face visible des cartes de votre zone privée et qu'aucun autre joueur ne peut venir y prendre ou retourner une carte. Il assure également que tous les joueurs voient en permanence exactement la même situation de jeu.

Essayez de lancer deux clients (avec des noms de joueurs différents !) et observez à quel point le service WCF est réactif. L'état de l'environnement et les mouvements des cartes sont réellement reportés par le serveur à l'autre client en temps réel avec un temps de réponse très court.

Explications techniques:

Cette application WCF service client et le serveur ont été développés après avoir lu cet excellent article technique: Broadcasting Events with a Duplex WCF Service Il explique très clairement et pas à pas comment développer une telle application.

Mike Lie, l'auteur de cet article, a également publié un livre: WCF Multi-layer Services Development with Entity Framework - 4ème Edition (pour Visual Studio 2013 / Windows 7 et Windows 8.1). Vous pouvez l'obtenir directement sur le site web de l'éditeur à cette adresse: You can get it directly from the publisher's website at this address

https://www.packtpub.com/application-development/wcf-multi-layer-services-development-entity-framework-4th-edition

ou par Amazon à cette adresse:

http://www.amazon.com/Multi-Layer-Services-Development-Entity-Framework/dp/1784391042

Retour à la page principale de Raptor Development.