middleware/Communication/WSServer.cs
changeset 37 37ebedd84755
parent 29 fcf435874395
child 41 d2f735d7763f
--- a/middleware/Communication/WSServer.cs	Wed May 30 10:22:46 2012 +0200
+++ b/middleware/Communication/WSServer.cs	Thu Jun 21 16:52:56 2012 +0200
@@ -43,18 +43,19 @@
         //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 gesturesMessageCreated, modeMessageCreated;
         private bool gestureLocked, modLocked;
         //Intervalle minimum entre les gestures.
         private int timerElapsing;
-        //Timer.
-        private System.Timers.Timer _timer;
+        //Timers.
+        private System.Timers.Timer _gesturesTimer;
+        private System.Timers.Timer _userPositionTimer;
         //Dernier code envoyé.
         private String lastCode;
         //Messages envoyés en WS.
-        private String rightHandMessage, leftHandMessage, gestureMessage;
+        private String rightHandMessage, leftHandMessage, gesturesMessage, modeMessage;
         //Messages précédents
-        private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage;
+        private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage, prevModeMessage;
 
         /*
         * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
@@ -70,14 +71,15 @@
             //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;
+            gesturesMessageCreated = false;
+            modeMessageCreated = false;
             gestureLocked = false;
             modLocked = false;
             lastCode = "";
 
-            timerElapsing = _timerElapsing;
+            timerElapsing = 500;// _timerElapsing;
 
-            rightHandMessage = leftHandMessage = gestureMessage = "";
+            rightHandMessage = leftHandMessage = gesturesMessage = modeMessage = "";
 
             //On démarre le serveur WebSocket.
             server.Start(socket =>
@@ -103,9 +105,11 @@
             ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
 
             //On instancie le timer à N ms.
-            _timer = new System.Timers.Timer(timerElapsing);
+            _gesturesTimer = new System.Timers.Timer(timerElapsing);
+            _userPositionTimer = new System.Timers.Timer(timerElapsing/5);
             //Dès que le timer est expiré, on appelle _timer_Elapsed.
-            _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
+            _gesturesTimer.Elapsed += new ElapsedEventHandler(_gesturesTimer_Elapsed);
+            _userPositionTimer.Elapsed += new ElapsedEventHandler(_userPositionTimer_Elapsed);
 
             /*var input = Console.ReadLine();
             while (input != "exit")
@@ -121,14 +125,29 @@
         /*
          * Méthode appelée à l'expiration du timer pour les gestures et modes.
          */
-        public void _timer_Elapsed(object sender, ElapsedEventArgs e)
+        public void _gesturesTimer_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;
+            //modLocked = false;
+            lastCode = "";
             //On arrête le timer.
-            _timer.Stop();
+            _gesturesTimer.Stop();
+        }
+
+        /*
+         * Méthode appelée à l'expiration du timer pour les positions d'utilisateur.
+         */
+        public void _userPositionTimer_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;
+            lastCode = "";
+            //On arrête le timer.
+            _userPositionTimer.Stop();
         }
 
         /*
@@ -181,22 +200,32 @@
         public void GesturePerformed(String code)
         {
             //Si le code vient d'être envoyé, on passe.
-            if (lastCode.Equals(code))
+            /*if (lastCode.Equals(code))
                 return;
-            lastCode = code;
+            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;
-                    gestureMessage = "2-" + code;
+                //if (!gesturesMessageCreated)
+                //{
+                    gesturesMessageCreated = true;
+                    gesturesMessage = "2-" + code;
+
+                    //Console.WriteLine(gesturesMessage);
+                    
+                    foreach (var socket in allSockets.ToList())
+                    {
+                        socket.Send(gesturesMessage);
+                    }
+
                     //On démarre le timer.
-                    _timer.Start();
-                }
+                    _gesturesTimer.Start();
+
+                    //Console.WriteLine(gestureMessage);
+                //}
             }
         }
 
@@ -206,22 +235,29 @@
         public void ModeNotification(String code)
         {
             //Si le code vient d'être envoyé, on passe.
-            if (lastCode.Equals(code))
+            /*if (lastCode.Equals(code))
                 return;
-            lastCode = code;
+            lastCode = code;*/
             //Si on a été notifié.
             if (!modLocked)
             {
                 modLocked = true;
 
                 //On crée un message contenant le code à envoyer.
-                if (!messageCreated)
-                {
-                    messageCreated = true;
-                    gestureMessage = "2-" + code;
+                //if (!modeMessageCreated)
+                //{
+                    modeMessageCreated = true;
+                    modeMessage = "2-" + code;
                     //On démarre le timer.
-                    _timer.Start();
-                }
+
+                    foreach (var socket in allSockets.ToList())
+                    {
+                        socket.Send(modeMessage);
+                    }
+                    _userPositionTimer.Start();
+
+                    //Console.WriteLine(modeMessage);
+                //}
             }
         }
 
@@ -234,16 +270,28 @@
         {
             while (true)
             {
-                //S'il existe un message.
-                if (gestureMessage != null && !gestureMessage.Equals("") && !gestureMessage.Equals(prevGestureMessage))
+                /*//S'il existe un message de gesture.
+                if (gesturesMessage != null && !gesturesMessage.Equals(""))// && !gesturesMessage.Equals(prevGestureMessage))
                 {
                     //On l'envoie au client (au host et au port spécifiés dans le constructeur).
                     foreach (var socket in allSockets.ToList())
                     {
-                        socket.Send(gestureMessage);
-                        prevGestureMessage = gestureMessage;
+                        socket.Send(gesturesMessage);
+                        //prevGestureMessage = gesturesMessage;
                     }
                 }
+
+                //S'il existe un message de mode.
+                if (modeMessage != null && !modeMessage.Equals(""))// && !modeMessage.Equals(prevModeMessage))
+                {
+                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
+                    foreach (var socket in allSockets.ToList())
+                    {
+                        socket.Send(modeMessage);
+                        //prevModeMessage = modeMessage;
+                    }
+                }*/
+
                 //Si la main gauche est détectée.
                 if (leftHandMessage != null && !leftHandMessage.Equals("") && !leftHandMessage.Equals(prevLeftHandMessage))
                 {
@@ -269,11 +317,19 @@
                 Thread.Sleep(25);
 
                 //Si une gesture a été effectuée et que le délai d'attente est expiré.
-                if (messageCreated && !gestureLocked && !modLocked)
+                if (gesturesMessageCreated && !gestureLocked)
                 {
                     //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
-                    messageCreated = false;
-                    gestureMessage = "";
+                    gesturesMessageCreated = false;
+                    gesturesMessage = "";
+                }
+
+                //Si un mode a été effectuée et que le délai d'attente est expiré.
+                if (modeMessageCreated && !modLocked)
+                {
+                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
+                    modeMessageCreated = false;
+                    modeMessage = "";
                 }
             }
         }