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