middleware/Communication/WSServer.cs
author bastiena
Mon, 24 Sep 2012 15:20:10 +0200
changeset 124 d2b4682dc9cc
parent 41 d2f735d7763f
permissions -rw-r--r--
Étiquette V00.17 ajoutée à la révision 57a65edde708
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;
37
bastiena
parents: 29
diff changeset
    46
        private bool gesturesMessageCreated, modeMessageCreated;
29
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;
37
bastiena
parents: 29
diff changeset
    50
        //Timers.
bastiena
parents: 29
diff changeset
    51
        private System.Timers.Timer _gesturesTimer;
bastiena
parents: 29
diff changeset
    52
        private System.Timers.Timer _userPositionTimer;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    53
        //Dernier code envoyé.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    54
        private String lastCode;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    55
        //Messages envoyés en WS.
37
bastiena
parents: 29
diff changeset
    56
        private String rightHandMessage, leftHandMessage, gesturesMessage, modeMessage;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    57
        //Messages précédents
37
bastiena
parents: 29
diff changeset
    58
        private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage, prevModeMessage;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    59
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    60
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    61
        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    62
        * 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
    63
        * s'il reçoit des notifications.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    64
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    65
        public WSServer(String host, int port, int _timerElapsing)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    66
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    67
            FleckLog.Level = LogLevel.Debug;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    68
            allSockets = new List<IWebSocketConnection>();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    69
            server = new WebSocketServer(port, "ws://" + host + ":" + port);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    70
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    71
            //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
    72
            leftHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    73
            rightHandCursorCreated = false;
37
bastiena
parents: 29
diff changeset
    74
            gesturesMessageCreated = false;
bastiena
parents: 29
diff changeset
    75
            modeMessageCreated = false;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    76
            gestureLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    77
            modLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    78
            lastCode = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    79
37
bastiena
parents: 29
diff changeset
    80
            timerElapsing = 500;// _timerElapsing;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    81
37
bastiena
parents: 29
diff changeset
    82
            rightHandMessage = leftHandMessage = gesturesMessage = modeMessage = "";
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    83
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    84
            //On démarre le serveur WebSocket.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    85
            server.Start(socket =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    86
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    87
                socket.OnOpen = () =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    88
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    89
                    Console.WriteLine("Open!");
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    90
                    allSockets.Add(socket);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    91
                };
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    92
                socket.OnClose = () =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    93
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    94
                    Console.WriteLine("Close!");
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    95
                    allSockets.Remove(socket);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    96
                };
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    97
            });
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    98
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    99
            //On initialise le threadPool (appelé toutes les N ms).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   100
            ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   101
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   102
            //On instancie le timer à N ms.
37
bastiena
parents: 29
diff changeset
   103
            _gesturesTimer = new System.Timers.Timer(timerElapsing);
bastiena
parents: 29
diff changeset
   104
            _userPositionTimer = new System.Timers.Timer(timerElapsing/5);
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   105
            //Dès que le timer est expiré, on appelle _timer_Elapsed.
37
bastiena
parents: 29
diff changeset
   106
            _gesturesTimer.Elapsed += new ElapsedEventHandler(_gesturesTimer_Elapsed);
bastiena
parents: 29
diff changeset
   107
            _userPositionTimer.Elapsed += new ElapsedEventHandler(_userPositionTimer_Elapsed);
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   108
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   109
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   110
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   111
         * Méthode appelée à l'expiration du timer pour les gestures et modes.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   112
         */
37
bastiena
parents: 29
diff changeset
   113
        public void _gesturesTimer_Elapsed(object sender, ElapsedEventArgs e)
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   114
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   115
            //On débloque la détection de gesture.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   116
            gestureLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   117
            //On débloque la notification de nouveau mode.
37
bastiena
parents: 29
diff changeset
   118
            //modLocked = false;
bastiena
parents: 29
diff changeset
   119
            lastCode = "";
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   120
            //On arrête le timer.
37
bastiena
parents: 29
diff changeset
   121
            _gesturesTimer.Stop();
bastiena
parents: 29
diff changeset
   122
        }
bastiena
parents: 29
diff changeset
   123
bastiena
parents: 29
diff changeset
   124
        /*
bastiena
parents: 29
diff changeset
   125
         * Méthode appelée à l'expiration du timer pour les positions d'utilisateur.
bastiena
parents: 29
diff changeset
   126
         */
bastiena
parents: 29
diff changeset
   127
        public void _userPositionTimer_Elapsed(object sender, ElapsedEventArgs e)
bastiena
parents: 29
diff changeset
   128
        {
bastiena
parents: 29
diff changeset
   129
            //On débloque la notification de nouveau mode.
bastiena
parents: 29
diff changeset
   130
            modLocked = false;
bastiena
parents: 29
diff changeset
   131
            lastCode = "";
bastiena
parents: 29
diff changeset
   132
            //On arrête le timer.
bastiena
parents: 29
diff changeset
   133
            _userPositionTimer.Stop();
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   134
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   135
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   136
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   137
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   138
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   139
        public void LeftHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   140
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   141
            leftHandMessage = "0-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   142
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   143
            if (!leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   144
                leftHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   145
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   146
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   147
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   148
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   149
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   150
        public void RightHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   151
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   152
            rightHandMessage = "1-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   153
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   154
            if (!rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   155
                rightHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   156
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   157
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   158
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   159
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   160
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   161
        public void LeftHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   162
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   163
            leftHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   164
            //Si le curseur de la main gauche existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   165
            if (leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   166
                leftHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   167
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   168
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   169
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   170
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   171
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   172
        public void RightHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   173
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   174
            rightHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   175
            //Si le curseur de la main droite existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   176
            if (rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   177
                rightHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   178
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   179
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   180
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   181
        * 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
   182
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   183
        public void GesturePerformed(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   184
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   185
            //Si une gesture a été effectuée, on bloque un certain temps.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   186
            if (!gestureLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   187
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   188
                gestureLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   189
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   190
                //On crée un message contenant le code à envoyer.
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   191
                gesturesMessageCreated = true;
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   192
                gesturesMessage = "2-" + code;
37
bastiena
parents: 29
diff changeset
   193
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   194
                //Console.WriteLine(gesturesMessage);
37
bastiena
parents: 29
diff changeset
   195
                    
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   196
                foreach (var socket in allSockets.ToList())
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   197
                {
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   198
                    socket.Send(gesturesMessage);
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   199
                }
37
bastiena
parents: 29
diff changeset
   200
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   201
                //On démarre le timer.
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   202
                _gesturesTimer.Start();
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   203
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   204
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   205
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   206
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   207
        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   208
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   209
        public void ModeNotification(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   210
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   211
            //Si on a été notifié.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   212
            if (!modLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   213
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   214
                modLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   215
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   216
                //On crée un message contenant le code à envoyer.
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   217
                modeMessageCreated = true;
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   218
                modeMessage = "2-" + code;
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   219
                //On démarre le timer.
37
bastiena
parents: 29
diff changeset
   220
41
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   221
                foreach (var socket in allSockets.ToList())
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   222
                {
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   223
                    socket.Send(modeMessage);
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   224
                }
d2f735d7763f Middleware:
bastiena
parents: 37
diff changeset
   225
                _userPositionTimer.Start();
29
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
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   230
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   231
        * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   232
        * le temps d'être envoyés.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   233
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   234
        private void ThreadPoolCallback(Object threadContext)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   235
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   236
            while (true)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   237
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   238
                //Si la main gauche est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   239
                if (leftHandMessage != null && !leftHandMessage.Equals("") && !leftHandMessage.Equals(prevLeftHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   240
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   241
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   242
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   243
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   244
                        socket.Send(leftHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   245
                        prevLeftHandMessage = leftHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   246
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   247
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   248
                //Si la main droite est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   249
                if (rightHandMessage != null && !rightHandMessage.Equals("") && !rightHandMessage.Equals(prevRightHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   250
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   251
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   252
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   253
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   254
                        socket.Send(rightHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   255
                        prevRightHandMessage = rightHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   256
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   257
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   258
                
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   259
                //On attend 25 ms.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   260
                Thread.Sleep(25);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   261
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   262
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
37
bastiena
parents: 29
diff changeset
   263
                if (gesturesMessageCreated && !gestureLocked)
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   264
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   265
                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
37
bastiena
parents: 29
diff changeset
   266
                    gesturesMessageCreated = false;
bastiena
parents: 29
diff changeset
   267
                    gesturesMessage = "";
bastiena
parents: 29
diff changeset
   268
                }
bastiena
parents: 29
diff changeset
   269
bastiena
parents: 29
diff changeset
   270
                //Si un mode a été effectuée et que le délai d'attente est expiré.
bastiena
parents: 29
diff changeset
   271
                if (modeMessageCreated && !modLocked)
bastiena
parents: 29
diff changeset
   272
                {
bastiena
parents: 29
diff changeset
   273
                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
bastiena
parents: 29
diff changeset
   274
                    modeMessageCreated = false;
bastiena
parents: 29
diff changeset
   275
                    modeMessage = "";
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   276
                }
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
         * Getters et Setters
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   282
         */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   283
        public void setTimerElapsing(int _timerElapsing)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   284
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   285
            timerElapsing = _timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   286
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   287
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   288
        public int getTimerElapsing()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   289
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   290
            return timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   291
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   292
    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   293
}