diff -r 9ccef81f02ab -r fcf435874395 middleware/Communication/Server.cs --- a/middleware/Communication/Server.cs Thu Apr 12 15:33:25 2012 +0200 +++ b/middleware/Communication/Server.cs Thu Apr 19 11:53:06 2012 +0200 @@ -16,93 +16,27 @@ * Auteur : alexandre.bastien@iri.centrepompidou.fr * * Fonctionnalités : Reçoit des notifications du module sous-module Tracking. - * Traduit les notifications sous forme de messages OSC et les envoie au Front Atelier. - * Forme des messages : - * - Notification de main dans le champ de recherche : Point3D indiquant la position de la main dans l'espace. + * Centralise les deux serveurs TUIO et WS et permettent aux autres modules de faire appel + * à eux via cette classe. */ using System; using System.Collections.Generic; using System.Linq; using System.Text; -using System.IO; -using System.Net; -using System.Net.Sockets; -using System.Threading; -using Tuio; -using System.Windows; -using Microsoft.Kinect; using System.Windows.Media.Media3D; -using System.Timers; -using System.Resources; -using System.Reflection; namespace Trakers.Communication { public class Server { - //Serveur TUIO, provenant de la DLL TuioServer créé par Bespoke. - private TuioServer server; + private TUIOServer TUIOserver; + private WSServer WSserver; - //Permet de savoir si un curseur pour la main gauche/droite a été créé. - private bool leftHandCursorCreated; - private bool rightHandCursorCreated; - private bool messageCreated; - private bool gestureLocked, modLocked; - //Intervalle minimum entre les gestures. - private int timerElapsing; - //Timer. - private System.Timers.Timer _timer; - //Dernier code envoyé. - private String lastCode; - - /* - * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs - * ne sont pas créés et on indique au ThreadPool une fonction de callback de manière à vérifier - * s'il reçoit des notifications. - */ public Server(String host, int port, int _timerElapsing) { - //Au départ, aucune main n'est dans le champ de recherche et aucune gesture n'est détectée. - leftHandCursorCreated = false; - rightHandCursorCreated = false; - messageCreated = false; - gestureLocked = false; - modLocked = false; - lastCode = ""; - - timerElapsing = _timerElapsing; - - //On démarre le serveur TUIO. - server = new TuioServer(host, port); - //On initialise le threadPool (appelé toutes les N ms). - ThreadPool.QueueUserWorkItem(ThreadPoolCallback); - - //On instancie le timer à N ms. - _timer = new System.Timers.Timer(timerElapsing); - //Dès que le timer est expiré, on appelle _timer_Elapsed. - _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed); - } - - /* - * Getter du serveur. - */ - public TuioServer getServer() - { - return server; - } - - /* - * Méthode appelée à l'expiration du timer pour les gestures et modes. - */ - public void _timer_Elapsed(object sender, ElapsedEventArgs e) - { - //On débloque la détection de gesture. - gestureLocked = false; - //On débloque la notification de nouveau mode. - modLocked = false; - //On arrête le timer. - _timer.Stop(); + TUIOserver = new TUIOServer(host, 8080, _timerElapsing); + WSserver = new WSServer(host, 8090, _timerElapsing); } /* @@ -110,15 +44,8 @@ */ public void LeftHandTracked(Point3D pt) { - //Si le curseur de la main gauche n'est pas créé, alors on le crée. - if (!leftHandCursorCreated) - { - server.AddTuioCursor(0, pt); - leftHandCursorCreated = true; - } - //S'il existe, on le met simplement à jour. - else - server.UpdateTuioCursor(0, pt); + TUIOserver.LeftHandTracked(pt); + WSserver.LeftHandTracked(pt); } /* @@ -126,15 +53,8 @@ */ public void RightHandTracked(Point3D pt) { - //Si le curseur de la main droite n'est pas créé, alors on le crée. - if (!rightHandCursorCreated) - { - server.AddTuioCursor(1, pt); - rightHandCursorCreated = true; - } - //S'il existe, on le met simplement à jour. - else - server.UpdateTuioCursor(1, pt); + TUIOserver.RightHandTracked(pt); + WSserver.RightHandTracked(pt); } /* @@ -142,12 +62,8 @@ */ public void LeftHandQuit() { - //Si le curseur de la main gauche existe, alors on le supprime. - if (leftHandCursorCreated) - { - server.DeleteTuioCursor(0); - leftHandCursorCreated = false; - } + TUIOserver.LeftHandQuit(); + WSserver.LeftHandQuit(); } /* @@ -155,12 +71,8 @@ */ public void RightHandQuit() { - //Si le curseur de la main droite existe, alors on le supprime. - if (rightHandCursorCreated) - { - server.DeleteTuioCursor(1); - rightHandCursorCreated = false; - } + TUIOserver.RightHandQuit(); + WSserver.RightHandQuit(); } /* @@ -168,24 +80,8 @@ */ public void GesturePerformed(String code) { - //Si le code vient d'être envoyé, on passe. - if (lastCode.Equals(code)) - return; - lastCode = code; - //Si une gesture a été effectuée, on bloque un certain temps. - if (!gestureLocked) - { - gestureLocked = true; - - //On crée un message contenant le code à envoyer. - if (!messageCreated) - { - messageCreated = true; - server.AddTuioString(2, code); - //On démarre le timer. - _timer.Start(); - } - } + TUIOserver.GesturePerformed(code); + WSserver.GesturePerformed(code); } /* @@ -193,63 +89,8 @@ */ public void ModeNotification(String code) { - //Si le code vient d'être envoyé, on passe. - if (lastCode.Equals(code)) - return; - lastCode = code; - //Si on a été notifié. - if (!modLocked) - { - modLocked = true; - - //On crée un message contenant le code à envoyer. - if (!messageCreated) - { - messageCreated = true; - server.AddTuioString(2, code); - //On démarre le timer. - _timer.Start(); - } - } - } - - /* - * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications. - * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas - * le temps d'être envoyés. - */ - private void ThreadPoolCallback(Object threadContext) - { - while (true) - { - //On initialise le message OSC. - server.InitFrame(); - //On l'envoie au client (au host et au port spécifiés dans le constructeur). - server.CommitFrame(); - //On attend 25 ms. - Thread.Sleep(25); - - //Si une gesture a été effectuée et que le délai d'attente est expiré. - if (messageCreated && !gestureLocked && !modLocked) - { - //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture. - messageCreated = false; - server.DeleteTuioString(2); - } - } - } - - /* - * Getters et Setters - */ - public void setTimerElapsing(int _timerElapsing) - { - timerElapsing = _timerElapsing; - } - - public int getTimerElapsing() - { - return timerElapsing; + TUIOserver.ModeNotification(code); + WSserver.ModeNotification(code); } } }