middleware/src/Communication/Server.cs
author bastiena
Thu, 22 Mar 2012 16:00:17 +0100
changeset 8 e4e7db2435f8
parent 5 d40f84d77db4
child 11 a1bf0d21022e
permissions -rw-r--r--
Processing: New examples implemented : Fluid, Smoke, Interaction examples. Split in one file for the main instructions, one for TUIO stuff. License headers added.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
/*
8
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     2
* This file is part of the TraKERS\Middleware package.
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     3
*
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     5
*
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     6
* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     7
* file that was distributed with this source code.
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     8
*/
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
     9
e4e7db2435f8 Processing:
bastiena
parents: 5
diff changeset
    10
/*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    11
 * Projet : TraKERS
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
 * Module : MIDDLEWARE
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
 * Sous-Module : Communication
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
 * Classe : Server
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
 * Fonctionnalités : Reçoit des notifications du module sous-module Tracking.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
 * Traduit les notifications sous forme de messages OSC et les envoie au Front Atelier.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
 * Forme des messages :
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
 * - Notification de main dans le champ de recherche : Point3D indiquant la position de la main dans l'espace.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
using System;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
using System.Collections.Generic;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
using System.Linq;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
using System.Text;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
using System.IO;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
using System.Net;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
using System.Net.Sockets;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
using System.Threading;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
using Tuio;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
using System.Windows;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
using Microsoft.Kinect;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
using Trakers.Tracking;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
using System.Windows.Media.Media3D;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
using Trakers.Tracking.Events;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    38
using System.Timers;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    39
using Trakers.Debug;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    40
using System.Resources;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    41
using System.Reflection;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
namespace Trakers.Communication
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
    public class Server
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
    {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
        //Serveur TUIO, provenant de la DLL TuioServer créé par Bespoke.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
        private TuioServer server;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    49
        //Affichage de debug.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    50
        private DebugWindow debug;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
        //Permet de savoir si un curseur pour la main gauche/droite a été créé.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
        private bool leftHandCursorCreated;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
        private bool rightHandCursorCreated;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    55
        private bool messageCreated;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    56
        private bool gestureLocked;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    57
        //Intervalle minimum entre les gestures.
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    58
        private int timerElapsing;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    59
        //Timer.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    60
        private System.Timers.Timer _timer;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    61
        //Gestionnaire de ressources.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    62
        private ResourceManager rm;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
        * ne sont pas créés et on indique au ThreadPool une fonction de callback de manière à vérifier
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
        * s'il reçoit des notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
        */
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    69
        public Server(String host, int port, int _timerElapsing, DebugWindow _debug)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
        {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    71
            debug = _debug;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    72
            rm = new ResourceManager("Trakers.Properties.resources", Assembly.GetExecutingAssembly());
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    73
            //Au départ, aucune main n'est dans le champ de recherche et aucune gesture n'est détectée.
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
            leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
            rightHandCursorCreated = false;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    76
            messageCreated = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    77
            gestureLocked = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    78
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    79
            timerElapsing = _timerElapsing;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    80
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    81
            try
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    82
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    83
                //On démarre le serveur TUIO.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    84
                server = new TuioServer(host, port);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    85
                //On initialise le threadPool (appelé toutes les N ms).
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    86
                ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    87
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    88
                //On instancie le timer à N ms.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    89
                _timer = new System.Timers.Timer(timerElapsing);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    90
                //Dès que le timer est expiré, on appelle _timer_Elapsed.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    91
                _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    92
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    93
            catch (Exception)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    94
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    95
                debug.ExceptionLbl.Content = rm.GetString("serverCantStart");
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    96
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
        * Getter du serveur.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
        public TuioServer getServer()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
            return server;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
        /*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   108
         * Méthode appelée à l'expiration du timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   109
         */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   110
        public void _timer_Elapsed(object sender, ElapsedEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   111
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   112
            //On débloque la détection de gesture.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   113
            gestureLocked = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   114
            //On arrête le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   115
            _timer.Stop();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   116
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   117
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   118
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
        public void LeftHandTracked(object sender, LeftHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   122
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
            if (!leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
                server.AddTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
                leftHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
                server.UpdateTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
        public void RightHandTracked(object sender, RightHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
            if (!rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
                server.AddTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
                rightHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   147
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   148
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   149
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   150
                server.UpdateTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   152
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   153
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   154
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   155
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   156
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   157
        public void LeftHandQuit(object sender, LeftHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   158
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   159
            //Si le curseur de la main gauche existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   160
            if (leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   161
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   162
                server.DeleteTuioCursor(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   163
                leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   164
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   165
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   166
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   167
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   168
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   169
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   170
        public void RightHandQuit(object sender, RightHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
            //Si le curseur de la main droite existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
            if (rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   175
                server.DeleteTuioCursor(1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   176
                rightHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   177
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   178
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   179
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   180
        /*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   181
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un swipe.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   182
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   183
        public void Swipe(object sender, SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   184
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   185
            if (e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   186
                GesturePerformed("SWIPE LEFT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   187
            else if (e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   188
                GesturePerformed("SWIPE RIGHT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   189
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   190
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   191
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   192
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un push/pull.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   193
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   194
        public void Pull(object sender, PushEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   195
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   196
            if(e.hand == Tracking.Gestures.PushDetector.Hand.NONE)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   197
                return;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   198
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   199
            String pushPull = "", hand = "";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   200
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   201
                pushPull = "PUSH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   202
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   203
                pushPull = "PULL";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   204
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   205
            if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   206
                hand = "LEFT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   207
            else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   208
                hand = "RIGHT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   209
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   210
                hand = "BOTH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   211
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   212
            GesturePerformed(pushPull + "-" + hand);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   213
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   214
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   215
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   216
        * Méthode appelée lorsqu'une gesture a été détectée et que l'événement approprié a été lancé.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   217
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   218
        public void GesturePerformed(String code)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   219
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   220
            //Si une gesture a été effectuée, on bloque un certain temps.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   221
            if (!gestureLocked)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   222
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   223
                gestureLocked = true;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   224
                
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   225
                //On crée un message contenant le code à envoyer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   226
                if (!messageCreated)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   227
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   228
                    messageCreated = true;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   229
                    server.AddTuioString(2, code);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   230
                    //On démarre le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   231
                    _timer.Start();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   232
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   233
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   234
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   235
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   236
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   237
        * Permet de convertir un point de position de noeud en Point3D.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   238
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   239
        private Point3D SkeletonPointToPoint3D(SkeletonPoint p)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   240
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   241
            return new Point3D((double)p.X, (double)p.Y, (double)p.Z);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   242
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   243
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   244
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   245
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   246
        * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   247
        * le temps d'être envoyés.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   248
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   249
        private void ThreadPoolCallback(Object threadContext)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   250
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   251
            while (true)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   252
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   253
                //On initialise le message OSC.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   254
                server.InitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   255
                //On l'envoie au client (au host et au port spécifiés dans le constructeur).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   256
                server.CommitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   257
                //On attend 25 ms.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   258
                Thread.Sleep(25);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   259
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   260
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   261
                if (messageCreated && !gestureLocked)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   262
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   263
                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   264
                    messageCreated = false;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   265
                    server.DeleteTuioString(2);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   266
                }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   267
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   268
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   269
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   270
}