L.O.M : Multiplayer Online TicTacToe

Technologies :
Serveur : C#.net  vtortola/WebSocketListener
Client : Html /JavaScript;  JQuery Mobile
Démo : lom.projects.barj.fr
Debian / Apache / Mono
Votre navigateur doit supporter nativement les WebSockets.
L’interface est prévue pour mobile.Les compte démos sont accessibles via le bouton information.

lom

Pourquoi  Faire ?

L’idée n’est pas spécialement originale je dois bien l’admettre.Ces temps ci, je m’intéresse de plus près  au développent de jeux multijoueur.
Parce qu’il faut bien commencer par quelque chose; et autant que la dite chose soit la plus simple possible ;  j’ai décidé de développer un morpion.
Et quoi de mieux qu’un smartphone pour jouer au morpion à l’arrêt de bus quand on s’ennuie  ? Il fallait que ça passe sur mobile.
J’ai souhaité le faire le plus simplement et rapidement possible; il ne s’agit que d’une « maquette »; fonctionnelle certes; et mon but n’est pas d’organiser des compétitions de morpion en ligne.
(contrairement à ce  que pourrais l’indiquer le nom de l’application, que je vais avoir du mal à assumer)

Pourquoi ces technologies ?

Il existe probablement des technologies plus adaptés à ce que je veux faire.J’aurais pu faire la partie serveur avec Nodejs et Socket.io par exemple.
Si j’ai choisis ces technos, c’est avant tout parce que j’avais envie de les pratiquer, et pas suite à une analyse pointue des besoins de l’application.
(C’est quand même un morpion je  rappelle)
Me sentant un poil rouillé en C#, j’ai choisi d’en faire la partie serveur.
Je voulais rester simple côté UI, et JQuery mobile m’a paru avoir bon rapport ergonomie/ facilité d’implémentation.

Fonctionnalités

Trois pages   :

  • Page login. L’utilisateur s’identifie ici, il est dirigé sur la page listing des parties.
  • Page listing des parties  : Créer une partie / Rejoindre une partie en cours.
  • Page de jeu :  Ici les joueurs s’affrontent au classique Tic Tac Toe.

Trois comptes démo sont disponibles (bouton info dans l’application).Si deux joueurs s’affrontent déjà, vous pouvez quand même rejoindre une partie en tant que spectateur.

Péripéties

Je me suis pris une première claque quand j’ai réalisé que je ne pouvais pas utiliser System.Net.WebSockets. du Framework .NET ,car pas supporté nativement sous Windows 7 (Ni par Mono d’ailleurs).J’ai choisi l’implémentation tierce de Vtortola, séduit par sa simplicité à implémenter et sa documentation.
Une fois codée, j’ai séparé la logique dans une DLL et créé deux interfaces pour le serveur : console et service.
Le combat suivant a été le « portage » sous mono. Au final il m’a juste fallu copier une DLL (System.Threading.Tasks.Dataflow.dll)
Viens ensuite la « daemonisation » : j’ai utilisé mono-service  et un script init.d. pour ce faire.Il s’est avéré plus simple, sans retouche de code, de daeomoniser le service plutôt que l’application console.
Je voulais aussi que serveur et client soient disponibles sur le port 80, accessible via un nom de domaine, afin d’éviter tout problème de filtrage de port en sortie. (connexion 3g, réseau d’entreprise).
Problème : j’utilise apache2.2 et mod_proxy  pour servir mon application;  mais le support des WebSockets vient avec la version 2.4 (avec mod_proxy_wstunnel).
J’ai appris avec la plus grande joie qu’un patch backportait cette fonctionnalité : après une recompilation  des modules, nous voilà !

Et le code source ?

Il est destiné à aller sur mon compte Github, mais pour ça; un nettoyage est nécessaire.