Ice
Un article de Games Creators Network.
Sommaire |
[modifier] Ice - Framework Reseau
voici un petit tutoriel sur le framework réseau Ice de ZeroC (www.zeroc.com). Plutôt que de parler théorie, et concept, je vais essayer de mettre en oeuvre 3 petits projets, de difficulté croissante.
Je vous laisse télécharger la documentation, et Ice sur le site, et faire l'install.
Le tuto en python serait fait sur la page IcePython
[modifier] Objectifs
Avant toute chose, comme pour tout projet, on va se donner nos buts à atteindre.
Etape 1: Créer un client et un serveur, se connecter au serveur.
Etape 2: Récupérer un objet du serveur, et l'utiliser
Etape 3: Mettre en place une connexion bidirectionnelle.
[modifier] Etape 1
Le langage choisi est C++. Il faut obligatoirement un langage objet. Le but est donc d'avoir un client console, qui essaye de se connecter à un serveur.
On va tout d'abord définir une classe, qui sera appelée depuis le client : connexionManager.
Ice a son propre langage de déclaration (slice), très bien documenté et assez simple à comprendre.
A partir de ce fichier slice, Ice nous met à disposition des générateurs de classe, pour différents langage. Slice permet d'être indépendant du langage, et d'avoir une définition commune entre les clients et le serveur.
[modifier] Fichier slice
Créons notre premier fichier slice IconnexionManager.ice:
#ifndef _ICONNEXIONMANAGER_ #define _ICONNEXIONMANAGER_ module shimrod{ interface IConnexionManager{ void newIceConnexion(string name, string pwd); void disconnect(string name); }; }; #endif
En détail : Pour ceux qui connaissent le C++, le ifndef.... Pour les autres langages, on crée un identifiant unique pour la déclaration. Ainsi lors des inclusions, cela permet de ne pas faire des doubles déclarations, quand une classe est appelée par plusieurs autres.
Concernant la déclaration du nom du module, c'est traduit selon le langage par un nom de package en Java, un espace de nom en C++ (namespace). On déclare ensuite une interface, que la classe devra implémenter (je vous laisse relire vos cours).
Pour les 2 fonctions, on utilise des mots clefs classiques (voir la doc, mais en gros float, integer, string...). Pour l'instant nos 2 fonctions ne retournent rien, donc void.
[modifier] Génération des classes
Pour cela, on crée un petit shell (generate.bat sous windows par exemple, ou en ligne de commande), que vous mettez à la racine du répertoire d'install de ice.
set path=%path%;D:\app\ice320VC8\bin
slice2cpp -ISlice *.ice
vous avez également la commande slice2java, slice2python...
Placer votre fichier IconnexionManager.ice dans le répertoire racine d'install de Ice, et lancez le generate.bat.
En toute rigueur vous trouverez pour C++ 2 fichiers IconnexionManager.h, et IconnexionManager.cpp.
[modifier] Création du serveur
[modifier] Code C++
[modifier] Paramétrage
[modifier] Test
[modifier] Création du client
[modifier] Code C++
[modifier] Paramétrage
[modifier] Test
[modifier] Etape 2
[modifier] Classe Joueur
[modifier] Fichier Slice
[modifier] Modification Serveur
[modifier] Modification Client

