middleware/Communication/WSServer.cs
author bastiena
Fri, 11 May 2012 11:04:06 +0200
changeset 31 2c7fc855eba8
parent 29 fcf435874395
child 37 37ebedd84755
permissions -rw-r--r--
FRONT IDILL : Player implemented in the mosaic.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     1
/*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Middleware package.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     3
*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     5
*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     6
* For the full copyright and license information, please view the LICENSE
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     8
*/
fcf435874395 Middleware :
bastiena
parents:
diff changeset
     9
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    10
/*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    12
 * Module : MIDDLEWARE
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    13
 * Sous-Module : Communication
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    14
 * Classe : WSServer
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    15
 * 
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    16
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    17
 * 
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    18
 * Fonctionnalités : Reçoit des notifications du module sous-module Tracking.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    19
 * Traduit les notifications sous forme de strings et les envoie au Front IDILL via WebSocket.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    20
 * Forme des messages :
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    21
 * - Notification de main dans le champ de recherche : Point3D converti en String indiquant la position de la main dans l'espace.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    22
 * - Notification de gesture/mode : String.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    23
 * - Paramètres de config : String.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    24
 */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    25
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    26
using System;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    27
using System.Collections.Generic;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    28
using System.Linq;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    29
using System.Text;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    30
using System.Threading;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    31
using Fleck;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    32
using System.Timers;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    33
using System.Windows.Media.Media3D;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    34
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    35
namespace Trakers.Communication
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    36
{
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    37
    public class WSServer
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    38
    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    39
        //Server WebSocket.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    40
        WebSocketServer server;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    41
        List<IWebSocketConnection> allSockets;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    42
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    43
        //Permet de savoir si un curseur pour la main gauche/droite a été créé.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    44
        private bool leftHandCursorCreated;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    45
        private bool rightHandCursorCreated;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    46
        private bool messageCreated;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    47
        private bool gestureLocked, modLocked;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    48
        //Intervalle minimum entre les gestures.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    49
        private int timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    50
        //Timer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    51
        private System.Timers.Timer _timer;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    52
        //Dernier code envoyé.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    53
        private String lastCode;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    54
        //Messages envoyés en WS.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    55
        private String rightHandMessage, leftHandMessage, gestureMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    56
        //Messages précédents
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    57
        private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    58
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    59
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    60
        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    61
        * ne sont pas créés et on indique au ThreadPool une fonction de callback de manière à vérifier
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    62
        * s'il reçoit des notifications.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    63
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    64
        public WSServer(String host, int port, int _timerElapsing)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    65
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    66
            FleckLog.Level = LogLevel.Debug;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    67
            allSockets = new List<IWebSocketConnection>();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    68
            server = new WebSocketServer(port, "ws://" + host + ":" + port);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    69
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    70
            //Au départ, aucune main n'est dans le champ de recherche et aucune gesture n'est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    71
            leftHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    72
            rightHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    73
            messageCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    74
            gestureLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    75
            modLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    76
            lastCode = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    77
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    78
            timerElapsing = _timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    79
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    80
            rightHandMessage = leftHandMessage = gestureMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    81
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    82
            //On démarre le serveur WebSocket.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    83
            server.Start(socket =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    84
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    85
                socket.OnOpen = () =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    86
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    87
                    Console.WriteLine("Open!");
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    88
                    allSockets.Add(socket);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    89
                };
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    90
                socket.OnClose = () =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    91
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    92
                    Console.WriteLine("Close!");
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    93
                    allSockets.Remove(socket);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    94
                };
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    95
                /*socket.OnMessage = message =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    96
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    97
                    Console.WriteLine(message);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    98
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    99
                };*/
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   100
            });
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   101
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   102
            //On initialise le threadPool (appelé toutes les N ms).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   103
            ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   104
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   105
            //On instancie le timer à N ms.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   106
            _timer = new System.Timers.Timer(timerElapsing);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   107
            //Dès que le timer est expiré, on appelle _timer_Elapsed.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   108
            _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   109
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   110
            /*var input = Console.ReadLine();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   111
            while (input != "exit")
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   112
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   113
                foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   114
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   115
                    socket.Send(input);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   116
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   117
                input = Console.ReadLine();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   118
            }*/
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   119
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   120
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   121
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   122
         * Méthode appelée à l'expiration du timer pour les gestures et modes.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   123
         */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   124
        public void _timer_Elapsed(object sender, ElapsedEventArgs e)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   125
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   126
            //On débloque la détection de gesture.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   127
            gestureLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   128
            //On débloque la notification de nouveau mode.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   129
            modLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   130
            //On arrête le timer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   131
            _timer.Stop();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   132
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   133
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   134
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   135
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   136
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   137
        public void LeftHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   138
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   139
            leftHandMessage = "0-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   140
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   141
            if (!leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   142
                leftHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   143
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   144
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   145
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   146
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   147
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   148
        public void RightHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   149
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   150
            rightHandMessage = "1-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   151
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   152
            if (!rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   153
                rightHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   154
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   155
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   156
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   157
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   158
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   159
        public void LeftHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   160
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   161
            leftHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   162
            //Si le curseur de la main gauche existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   163
            if (leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   164
                leftHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   165
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   166
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   167
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   168
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   169
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   170
        public void RightHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   171
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   172
            rightHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   173
            //Si le curseur de la main droite existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   174
            if (rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   175
                rightHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   176
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   177
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   178
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   179
        * Méthode appelée lorsqu'une gesture a été détectée et que l'événement approprié a été lancé.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   180
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   181
        public void GesturePerformed(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   182
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   183
            //Si le code vient d'être envoyé, on passe.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   184
            if (lastCode.Equals(code))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   185
                return;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   186
            lastCode = code;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   187
            //Si une gesture a été effectuée, on bloque un certain temps.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   188
            if (!gestureLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   189
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   190
                gestureLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   191
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   192
                //On crée un message contenant le code à envoyer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   193
                if (!messageCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   194
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   195
                    messageCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   196
                    gestureMessage = "2-" + code;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   197
                    //On démarre le timer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   198
                    _timer.Start();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   199
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   200
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   201
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   202
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   203
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   204
        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   205
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   206
        public void ModeNotification(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   207
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   208
            //Si le code vient d'être envoyé, on passe.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   209
            if (lastCode.Equals(code))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   210
                return;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   211
            lastCode = code;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   212
            //Si on a été notifié.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   213
            if (!modLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   214
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   215
                modLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   216
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   217
                //On crée un message contenant le code à envoyer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   218
                if (!messageCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   219
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   220
                    messageCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   221
                    gestureMessage = "2-" + code;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   222
                    //On démarre le timer.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   223
                    _timer.Start();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   224
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   225
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   226
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   227
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   228
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   229
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   230
        * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   231
        * le temps d'être envoyés.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   232
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   233
        private void ThreadPoolCallback(Object threadContext)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   234
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   235
            while (true)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   236
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   237
                //S'il existe un message.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   238
                if (gestureMessage != null && !gestureMessage.Equals("") && !gestureMessage.Equals(prevGestureMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   239
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   240
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   241
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   242
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   243
                        socket.Send(gestureMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   244
                        prevGestureMessage = gestureMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   245
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   246
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   247
                //Si la main gauche est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   248
                if (leftHandMessage != null && !leftHandMessage.Equals("") && !leftHandMessage.Equals(prevLeftHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   249
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   250
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   251
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   252
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   253
                        socket.Send(leftHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   254
                        prevLeftHandMessage = leftHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   255
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   256
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   257
                //Si la main droite est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   258
                if (rightHandMessage != null && !rightHandMessage.Equals("") && !rightHandMessage.Equals(prevRightHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   259
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   260
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   261
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   262
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   263
                        socket.Send(rightHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   264
                        prevRightHandMessage = rightHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   265
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   266
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   267
                
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   268
                //On attend 25 ms.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   269
                Thread.Sleep(25);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   270
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   271
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   272
                if (messageCreated && !gestureLocked && !modLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   273
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   274
                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   275
                    messageCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   276
                    gestureMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   277
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   278
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   279
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   280
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   281
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   282
         * Getters et Setters
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   283
         */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   284
        public void setTimerElapsing(int _timerElapsing)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   285
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   286
            timerElapsing = _timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   287
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   288
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   289
        public int getTimerElapsing()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   290
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   291
            return timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   292
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   293
    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   294
}