diff -r 25e71ada2a6d -r 37ebedd84755 middleware/Communication/WSServer.cs --- 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 = ""; } } }