diff -r 5df462180423 -r eb52a12370a3 middleware/Communication/WSClient.cs
--- a/middleware/Communication/WSClient.cs Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-/*
-* This file is part of the TraKERS\Middleware package.
-*
-* (c) IRI
-*
-* For the full copyright and license information, please view the LICENSE
-* file that was distributed with this source code.
-*/
-
-/*
- * Projet : TraKERS
- * Module : MIDDLEWARE
- * Sous-Module : Communication
- * Classe : WSClient
- *
- * Auteur : alexandre.bastien@iri.centrepompidou.fr
- *
- * Fonctionnalités : Reçoit des notifications du Front IDILL.
- * Interprète les positions des curseurs dans le temps à partir du top du front.
- *
- * STATUS : EN DEVELOPPEMENT.
- *
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Fleck;
-using System.Threading;
-using System.Timers;
-using System.Windows.Media.Media3D;
-
-namespace Communication
-{
- public class WSClient
- {
- //Server WebSocket.
- WebSocketServer server;
- List allSockets;
-
- //Permet de savoir si un curseur pour la main gauche/droite a été créé.
- private bool leftHandCursorCreated;
- private bool rightHandCursorCreated;
- private bool gesturesMessageCreated, modeMessageCreated;
- private bool gestureLocked, modLocked;
- //Intervalle minimum entre les gestures.
- private int timerElapsing;
- //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, gesturesMessage, modeMessage;
- //Messages précédents
- private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage, prevModeMessage;
-
- /*
- * 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 WSClient(String host, int port, int _timerElapsing)
- {
- FleckLog.Level = LogLevel.Debug;
- allSockets = new List();
- server = new WebSocketServer(port, "ws://" + host + ":" + port);
-
- //Au départ, aucune main n'est dans le champ de recherche et aucune gesture n'est détectée.
- leftHandCursorCreated = false;
- rightHandCursorCreated = false;
- gesturesMessageCreated = false;
- modeMessageCreated = false;
- gestureLocked = false;
- modLocked = false;
- lastCode = "";
-
- timerElapsing = 500;// _timerElapsing;
-
- rightHandMessage = leftHandMessage = gesturesMessage = modeMessage = "";
-
- //On démarre le serveur WebSocket.
- server.Start(socket =>
- {
- socket.OnOpen = () =>
- {
- Console.WriteLine("Open!");
- allSockets.Add(socket);
- };
- socket.OnClose = () =>
- {
- Console.WriteLine("Close!");
- allSockets.Remove(socket);
- };
- /*socket.OnMessage = message =>
- {
- Console.WriteLine(message);
- allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
- };*/
- });
-
- //On initialise le threadPool (appelé toutes les N ms).
- ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
-
- //On instancie le timer à N ms.
- _gesturesTimer = new System.Timers.Timer(timerElapsing);
- _userPositionTimer = new System.Timers.Timer(timerElapsing/5);
- //Dès que le timer est expiré, on appelle _timer_Elapsed.
- _gesturesTimer.Elapsed += new ElapsedEventHandler(_gesturesTimer_Elapsed);
- _userPositionTimer.Elapsed += new ElapsedEventHandler(_userPositionTimer_Elapsed);
-
- /*var input = Console.ReadLine();
- while (input != "exit")
- {
- foreach (var socket in allSockets.ToList())
- {
- socket.Send(input);
- }
- input = Console.ReadLine();
- }*/
- }
-
- /*
- * Méthode appelée à l'expiration du timer pour les gestures et modes.
- */
- 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;
- lastCode = "";
- //On arrête le timer.
- _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();
- }
-
- /*
- * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
- */
- public void LeftHandTracked(Point3D pt)
- {
- leftHandMessage = "0-" + pt.X + ";" + pt.Y + ";" + pt.Z;
- //Si le curseur de la main gauche n'est pas créé, alors on le crée.
- if (!leftHandCursorCreated)
- leftHandCursorCreated = true;
- }
-
- /*
- * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
- */
- public void RightHandTracked(Point3D pt)
- {
- rightHandMessage = "1-" + pt.X + ";" + pt.Y + ";" + pt.Z;
- //Si le curseur de la main droite n'est pas créé, alors on le crée.
- if (!rightHandCursorCreated)
- rightHandCursorCreated = true;
- }
-
- /*
- * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
- */
- public void LeftHandQuit()
- {
- leftHandMessage = "";
- //Si le curseur de la main gauche existe, alors on le supprime.
- if (leftHandCursorCreated)
- leftHandCursorCreated = false;
- }
-
- /*
- * Méthode appelée lors d'une notification de type : main droite sortie du champ.
- */
- public void RightHandQuit()
- {
- rightHandMessage = "";
- //Si le curseur de la main droite existe, alors on le supprime.
- if (rightHandCursorCreated)
- rightHandCursorCreated = false;
- }
-
- /*
- * 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 (!gesturesMessageCreated)
- //{
- gesturesMessageCreated = true;
- gesturesMessage = "2-" + code;
-
- //Console.WriteLine(gesturesMessage);
-
- foreach (var socket in allSockets.ToList())
- {
- socket.Send(gesturesMessage);
- }
-
- //On démarre le timer.
- _gesturesTimer.Start();
-
- //Console.WriteLine(gestureMessage);
- //}
- }
- }
-
- /*
- * 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 (!modeMessageCreated)
- //{
- modeMessageCreated = true;
- modeMessage = "2-" + code;
- //On démarre le timer.
-
- foreach (var socket in allSockets.ToList())
- {
- socket.Send(modeMessage);
- }
- _userPositionTimer.Start();
-
- //Console.WriteLine(modeMessage);
- //}
- }
- }
-
- /*
- * 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)
- {
- /*//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(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))
- {
- //On l'envoie au client (au host et au port spécifiés dans le constructeur).
- foreach (var socket in allSockets.ToList())
- {
- socket.Send(leftHandMessage);
- prevLeftHandMessage = leftHandMessage;
- }
- }
- //Si la main droite est détectée.
- if (rightHandMessage != null && !rightHandMessage.Equals("") && !rightHandMessage.Equals(prevRightHandMessage))
- {
- //On l'envoie au client (au host et au port spécifiés dans le constructeur).
- foreach (var socket in allSockets.ToList())
- {
- socket.Send(rightHandMessage);
- prevRightHandMessage = rightHandMessage;
- }
- }
-
- //On attend 25 ms.
- Thread.Sleep(25);
-
- //Si une gesture a été effectuée et que le délai d'attente est expiré.
- if (gesturesMessageCreated && !gestureLocked)
- {
- //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
- 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 = "";
- }
- }
- }
-
- /*
- * Getters et Setters
- */
- public void setTimerElapsing(int _timerElapsing)
- {
- timerElapsing = _timerElapsing;
- }
-
- public int getTimerElapsing()
- {
- return timerElapsing;
- }
- }
-}