middleware/Communication/WSServer.cs
author bastiena
Thu, 21 Jun 2012 16:52:56 +0200
changeset 37 37ebedd84755
parent 29 fcf435874395
child 41 d2f735d7763f
permissions -rw-r--r--
MID : 2 new gestures : fall & jump config in a txt file
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
                /*socket.OnMessage = message =>
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    98
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
    99
                    Console.WriteLine(message);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   100
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   101
                };*/
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   102
            });
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   103
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   104
            //On initialise le threadPool (appelé toutes les N ms).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   105
            ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   106
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   107
            //On instancie le timer à N ms.
37
bastiena
parents: 29
diff changeset
   108
            _gesturesTimer = new System.Timers.Timer(timerElapsing);
bastiena
parents: 29
diff changeset
   109
            _userPositionTimer = new System.Timers.Timer(timerElapsing/5);
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   110
            //Dès que le timer est expiré, on appelle _timer_Elapsed.
37
bastiena
parents: 29
diff changeset
   111
            _gesturesTimer.Elapsed += new ElapsedEventHandler(_gesturesTimer_Elapsed);
bastiena
parents: 29
diff changeset
   112
            _userPositionTimer.Elapsed += new ElapsedEventHandler(_userPositionTimer_Elapsed);
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   113
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   114
            /*var input = Console.ReadLine();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   115
            while (input != "exit")
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   116
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   117
                foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   118
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   119
                    socket.Send(input);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   120
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   121
                input = Console.ReadLine();
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   122
            }*/
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   123
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   124
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   125
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   126
         * Méthode appelée à l'expiration du timer pour les gestures et modes.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   127
         */
37
bastiena
parents: 29
diff changeset
   128
        public void _gesturesTimer_Elapsed(object sender, ElapsedEventArgs e)
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   129
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   130
            //On débloque la détection de gesture.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   131
            gestureLocked = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   132
            //On débloque la notification de nouveau mode.
37
bastiena
parents: 29
diff changeset
   133
            //modLocked = false;
bastiena
parents: 29
diff changeset
   134
            lastCode = "";
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   135
            //On arrête le timer.
37
bastiena
parents: 29
diff changeset
   136
            _gesturesTimer.Stop();
bastiena
parents: 29
diff changeset
   137
        }
bastiena
parents: 29
diff changeset
   138
bastiena
parents: 29
diff changeset
   139
        /*
bastiena
parents: 29
diff changeset
   140
         * Méthode appelée à l'expiration du timer pour les positions d'utilisateur.
bastiena
parents: 29
diff changeset
   141
         */
bastiena
parents: 29
diff changeset
   142
        public void _userPositionTimer_Elapsed(object sender, ElapsedEventArgs e)
bastiena
parents: 29
diff changeset
   143
        {
bastiena
parents: 29
diff changeset
   144
            //On débloque la détection de gesture.
bastiena
parents: 29
diff changeset
   145
            //gestureLocked = false;
bastiena
parents: 29
diff changeset
   146
            //On débloque la notification de nouveau mode.
bastiena
parents: 29
diff changeset
   147
            modLocked = false;
bastiena
parents: 29
diff changeset
   148
            lastCode = "";
bastiena
parents: 29
diff changeset
   149
            //On arrête le timer.
bastiena
parents: 29
diff changeset
   150
            _userPositionTimer.Stop();
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   151
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   152
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   153
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   154
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   155
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   156
        public void LeftHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   157
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   158
            leftHandMessage = "0-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   159
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   160
            if (!leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   161
                leftHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   162
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   163
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   164
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   165
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   166
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   167
        public void RightHandTracked(Point3D pt)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   168
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   169
            rightHandMessage = "1-" + pt.X + ";" + pt.Y + ";" + pt.Z;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   170
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   171
            if (!rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   172
                rightHandCursorCreated = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   173
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   174
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   175
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   176
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   177
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   178
        public void LeftHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   179
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   180
            leftHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   181
            //Si le curseur de la main gauche existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   182
            if (leftHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   183
                leftHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   184
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   185
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   186
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   187
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   188
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   189
        public void RightHandQuit()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   190
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   191
            rightHandMessage = "";
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   192
            //Si le curseur de la main droite existe, alors on le supprime.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   193
            if (rightHandCursorCreated)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   194
                rightHandCursorCreated = false;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   195
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   196
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   197
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   198
        * 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
   199
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   200
        public void GesturePerformed(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   201
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   202
            //Si le code vient d'être envoyé, on passe.
37
bastiena
parents: 29
diff changeset
   203
            /*if (lastCode.Equals(code))
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   204
                return;
37
bastiena
parents: 29
diff changeset
   205
            lastCode = code;*/
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   206
            //Si une gesture a été effectuée, on bloque un certain temps.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   207
            if (!gestureLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   208
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   209
                gestureLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   210
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   211
                //On crée un message contenant le code à envoyer.
37
bastiena
parents: 29
diff changeset
   212
                //if (!gesturesMessageCreated)
bastiena
parents: 29
diff changeset
   213
                //{
bastiena
parents: 29
diff changeset
   214
                    gesturesMessageCreated = true;
bastiena
parents: 29
diff changeset
   215
                    gesturesMessage = "2-" + code;
bastiena
parents: 29
diff changeset
   216
bastiena
parents: 29
diff changeset
   217
                    //Console.WriteLine(gesturesMessage);
bastiena
parents: 29
diff changeset
   218
                    
bastiena
parents: 29
diff changeset
   219
                    foreach (var socket in allSockets.ToList())
bastiena
parents: 29
diff changeset
   220
                    {
bastiena
parents: 29
diff changeset
   221
                        socket.Send(gesturesMessage);
bastiena
parents: 29
diff changeset
   222
                    }
bastiena
parents: 29
diff changeset
   223
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   224
                    //On démarre le timer.
37
bastiena
parents: 29
diff changeset
   225
                    _gesturesTimer.Start();
bastiena
parents: 29
diff changeset
   226
bastiena
parents: 29
diff changeset
   227
                    //Console.WriteLine(gestureMessage);
bastiena
parents: 29
diff changeset
   228
                //}
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   229
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   230
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   231
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   232
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   233
        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   234
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   235
        public void ModeNotification(String code)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   236
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   237
            //Si le code vient d'être envoyé, on passe.
37
bastiena
parents: 29
diff changeset
   238
            /*if (lastCode.Equals(code))
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   239
                return;
37
bastiena
parents: 29
diff changeset
   240
            lastCode = code;*/
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   241
            //Si on a été notifié.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   242
            if (!modLocked)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   243
            {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   244
                modLocked = true;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   245
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   246
                //On crée un message contenant le code à envoyer.
37
bastiena
parents: 29
diff changeset
   247
                //if (!modeMessageCreated)
bastiena
parents: 29
diff changeset
   248
                //{
bastiena
parents: 29
diff changeset
   249
                    modeMessageCreated = true;
bastiena
parents: 29
diff changeset
   250
                    modeMessage = "2-" + code;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   251
                    //On démarre le timer.
37
bastiena
parents: 29
diff changeset
   252
bastiena
parents: 29
diff changeset
   253
                    foreach (var socket in allSockets.ToList())
bastiena
parents: 29
diff changeset
   254
                    {
bastiena
parents: 29
diff changeset
   255
                        socket.Send(modeMessage);
bastiena
parents: 29
diff changeset
   256
                    }
bastiena
parents: 29
diff changeset
   257
                    _userPositionTimer.Start();
bastiena
parents: 29
diff changeset
   258
bastiena
parents: 29
diff changeset
   259
                    //Console.WriteLine(modeMessage);
bastiena
parents: 29
diff changeset
   260
                //}
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   261
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   262
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   263
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   264
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   265
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   266
        * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   267
        * le temps d'être envoyés.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   268
        */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   269
        private void ThreadPoolCallback(Object threadContext)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   270
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   271
            while (true)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   272
            {
37
bastiena
parents: 29
diff changeset
   273
                /*//S'il existe un message de gesture.
bastiena
parents: 29
diff changeset
   274
                if (gesturesMessage != null && !gesturesMessage.Equals(""))// && !gesturesMessage.Equals(prevGestureMessage))
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   275
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   276
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   277
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   278
                    {
37
bastiena
parents: 29
diff changeset
   279
                        socket.Send(gesturesMessage);
bastiena
parents: 29
diff changeset
   280
                        //prevGestureMessage = gesturesMessage;
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   281
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   282
                }
37
bastiena
parents: 29
diff changeset
   283
bastiena
parents: 29
diff changeset
   284
                //S'il existe un message de mode.
bastiena
parents: 29
diff changeset
   285
                if (modeMessage != null && !modeMessage.Equals(""))// && !modeMessage.Equals(prevModeMessage))
bastiena
parents: 29
diff changeset
   286
                {
bastiena
parents: 29
diff changeset
   287
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
bastiena
parents: 29
diff changeset
   288
                    foreach (var socket in allSockets.ToList())
bastiena
parents: 29
diff changeset
   289
                    {
bastiena
parents: 29
diff changeset
   290
                        socket.Send(modeMessage);
bastiena
parents: 29
diff changeset
   291
                        //prevModeMessage = modeMessage;
bastiena
parents: 29
diff changeset
   292
                    }
bastiena
parents: 29
diff changeset
   293
                }*/
bastiena
parents: 29
diff changeset
   294
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   295
                //Si la main gauche est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   296
                if (leftHandMessage != null && !leftHandMessage.Equals("") && !leftHandMessage.Equals(prevLeftHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   297
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   298
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   299
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   300
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   301
                        socket.Send(leftHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   302
                        prevLeftHandMessage = leftHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   303
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   304
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   305
                //Si la main droite est détectée.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   306
                if (rightHandMessage != null && !rightHandMessage.Equals("") && !rightHandMessage.Equals(prevRightHandMessage))
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   307
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   308
                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   309
                    foreach (var socket in allSockets.ToList())
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   310
                    {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   311
                        socket.Send(rightHandMessage);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   312
                        prevRightHandMessage = rightHandMessage;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   313
                    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   314
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   315
                
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   316
                //On attend 25 ms.
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   317
                Thread.Sleep(25);
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   318
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   319
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
37
bastiena
parents: 29
diff changeset
   320
                if (gesturesMessageCreated && !gestureLocked)
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   321
                {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   322
                    //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
   323
                    gesturesMessageCreated = false;
bastiena
parents: 29
diff changeset
   324
                    gesturesMessage = "";
bastiena
parents: 29
diff changeset
   325
                }
bastiena
parents: 29
diff changeset
   326
bastiena
parents: 29
diff changeset
   327
                //Si un mode a été effectuée et que le délai d'attente est expiré.
bastiena
parents: 29
diff changeset
   328
                if (modeMessageCreated && !modLocked)
bastiena
parents: 29
diff changeset
   329
                {
bastiena
parents: 29
diff changeset
   330
                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
bastiena
parents: 29
diff changeset
   331
                    modeMessageCreated = false;
bastiena
parents: 29
diff changeset
   332
                    modeMessage = "";
29
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   333
                }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   334
            }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   335
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   336
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   337
        /*
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   338
         * Getters et Setters
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   339
         */
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   340
        public void setTimerElapsing(int _timerElapsing)
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   341
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   342
            timerElapsing = _timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   343
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   344
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   345
        public int getTimerElapsing()
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   346
        {
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   347
            return timerElapsing;
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   348
        }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   349
    }
fcf435874395 Middleware :
bastiena
parents:
diff changeset
   350
}