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