middleware/src/Communication/Server.cs
changeset 15 4b78f179e7ce
parent 14 10d5199d9874
child 16 a9ebacd6c089
--- a/middleware/src/Communication/Server.cs	Fri Mar 30 11:14:14 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,309 +0,0 @@
-/*
-* This file is part of the TraKERS\Middleware package.
-*
-* (c) IRI <http://www.iri.centrepompidou.fr/>
-*
-* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
-* file that was distributed with this source code.
-*/
-
-/*
- * Projet : TraKERS
- * Module : MIDDLEWARE
- * Sous-Module : Communication
- * Classe : Server
- * 
- * 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.
- */
-
-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 Trakers.Tracking;
-using System.Windows.Media.Media3D;
-using Trakers.Tracking.Events;
-using System.Timers;
-using Trakers.Debug;
-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;
-        //Affichage de debug.
-        private DebugWindow debug;
-
-        //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;
-        //Gestionnaire de ressources.
-        private ResourceManager rm;
-        //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, DebugWindow _debug)
-        {
-            debug = _debug;
-            rm = new ResourceManager("Trakers.Properties.resources", Assembly.GetExecutingAssembly());
-            //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;
-
-            try
-            {
-                //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);
-            }
-            catch (Exception)
-            {
-                debug.ExceptionLbl.Content = rm.GetString("serverCantStart");
-            }
-        }
-
-        /*
-        * 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();
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
-        */
-        public void LeftHandTracked(object sender, LeftHandTrackedEventArgs e)
-        {
-            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
-            if (!leftHandCursorCreated)
-            {
-                server.AddTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
-                leftHandCursorCreated = true;
-            }
-            //S'il existe, on le met simplement à jour.
-            else
-            {
-                server.UpdateTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
-            }
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
-        */
-        public void RightHandTracked(object sender, RightHandTrackedEventArgs e)
-        {
-            //Si le curseur de la main droite n'est pas créé, alors on le crée.
-            if (!rightHandCursorCreated)
-            {
-                server.AddTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
-                rightHandCursorCreated = true;
-            }
-            //S'il existe, on le met simplement à jour.
-            else
-            {
-                server.UpdateTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
-            }
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
-        */
-        public void LeftHandQuit(object sender, LeftHandQuitEventArgs e)
-        {
-            //Si le curseur de la main gauche existe, alors on le supprime.
-            if (leftHandCursorCreated)
-            {
-                server.DeleteTuioCursor(0);
-                leftHandCursorCreated = false;
-            }
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
-        */
-        public void RightHandQuit(object sender, RightHandQuitEventArgs e)
-        {
-            //Si le curseur de la main droite existe, alors on le supprime.
-            if (rightHandCursorCreated)
-            {
-                server.DeleteTuioCursor(1);
-                rightHandCursorCreated = false;
-            }
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : l'utilisateur fait un swipe.
-        */
-        public void Swipe(object sender, SwipeEventArgs e)
-        {
-            if (e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
-                GesturePerformed("SWIPE LEFT");
-            else if (e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
-                GesturePerformed("SWIPE RIGHT");
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : l'utilisateur fait un push/pull.
-        */
-        public void Push(object sender, PushEventArgs e)
-        {
-            if(e.hand == Tracking.Gestures.PushDetector.Hand.NONE)
-                return;
-
-            String pushPull = "", hand = "";
-            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
-                pushPull = "PUSH";
-            else
-                pushPull = "PULL";
-
-            if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
-                hand = "LEFT";
-            else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
-                hand = "RIGHT";
-            else
-                hand = "BOTH";
-
-            GesturePerformed(pushPull + "-" + hand);
-        }
-
-        /*
-        * Méthode appelée lorsqu'une gesture a été détectée et que l'événement approprié a été lancé.
-        */
-        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;
-                    Console.Out.WriteLine("A 2");
-                    server.AddTuioString(2, code);
-                    //On démarre le timer.
-                    _timer.Start();
-                }
-            }
-        }
-
-        /*
-        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
-        */
-        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;
-                    Console.Out.WriteLine("A 3");
-                    server.AddTuioString(2, code);
-                    //On démarre le timer.
-                    _timer.Start();
-                }
-            }
-        }
-
-        /*
-        * Permet de convertir un point de position de noeud en Point3D.
-        */
-        private Point3D SkeletonPointToPoint3D(SkeletonPoint p)
-        {
-            return new Point3D((double)p.X, (double)p.Y, (double)p.Z);
-        }
-
-        /*
-        * 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);
-                    //server.DeleteTuioString(3);
-                    Console.Out.WriteLine("R");
-                }
-            }
-        }
-    }
-}