--- 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 = "";
}
}
}