middleware/src/Communication/Server.cs
author bastiena
Thu, 15 Mar 2012 13:33:21 +0100
changeset 3 92f19af39024
parent 0 6fefd4afe506
child 5 d40f84d77db4
permissions -rw-r--r--
Middleware : Swipe & Push & Jump(Experimental) Detectors ant events added Server modified for gesture detection TUIO Server C# Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. TUIO Processing Java Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. Front Processing : Mask added and modifications in the drawing process New front for gesture detection (just showing a text message in the mask for the moment)
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;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
namespace Trakers.Communication
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
    public class Server
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    34
    {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    35
        //Serveur TUIO, provenant de la DLL TuioServer créé par Bespoke.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
        private TuioServer server;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
        //Permet de savoir si un curseur pour la main gauche/droite a été créé.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
        private bool leftHandCursorCreated;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
        private bool rightHandCursorCreated;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    41
        private bool messageCreated;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    42
        private bool gestureLocked;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    43
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    44
        private int timerElapsing;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    45
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    46
        System.Timers.Timer _timer;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
        * 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
    51
        * s'il reçoit des notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
        */
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    53
        public Server(String host, int port, int _timerElapsing)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    55
            //On démarre le serveur TUIO.
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
            server = new TuioServer(host, port);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    57
            //On initialise le threadPool (appelé toutes les N ms).
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    58
            ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    59
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    60
            //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
    61
            leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
            rightHandCursorCreated = false;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    63
            messageCreated = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    64
            gestureLocked = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    65
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    66
            timerElapsing = _timerElapsing;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    67
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    68
            //On instancie le timer à N ms.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    69
            _timer = new System.Timers.Timer(timerElapsing);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    70
            //Dès que le timer est expiré, on appelle _timer_Elapsed.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    71
            _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
        * Getter du serveur.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
        public TuioServer getServer()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    78
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
            return server;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
        /*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    83
         * Méthode appelée à l'expiration du timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    84
         */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    85
        public void _timer_Elapsed(object sender, ElapsedEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    86
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    87
            //On débloque la détection de gesture.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    88
            gestureLocked = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    89
            //On arrête le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    90
            _timer.Stop();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    91
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    92
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    93
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
        public void LeftHandTracked(object sender, LeftHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    98
            return;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
            if (!leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
                server.AddTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
                leftHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
                server.UpdateTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   115
        public void RightHandTracked(object sender, RightHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   116
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   117
            return;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   118
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
            if (!rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
                server.AddTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   122
                //server.AddTuioString(1, "BOO");
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
                rightHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
                server.UpdateTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   129
                //server.UpdateTuioString(1, "BOO");
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
        public void LeftHandQuit(object sender, LeftHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   138
            return;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
            //Si le curseur de la main gauche existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
            if (leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
                server.DeleteTuioCursor(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
                leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   147
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   148
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   149
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   150
        public void RightHandQuit(object sender, RightHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   152
            return;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   153
            //Si le curseur de la main droite existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   154
            if (rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   155
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   156
                server.DeleteTuioCursor(1);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   157
                //server.DeleteTuioString(1);
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   158
                rightHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   159
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   160
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   161
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   162
        /*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   163
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un swipe.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   164
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   165
        public void Swipe(object sender, SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   166
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   167
            if (e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   168
                GesturePerformed("SWIPE LEFT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   169
            else if (e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   170
                GesturePerformed("SWIPE RIGHT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   171
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   172
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   173
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   174
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un push/pull.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   175
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   176
        public void Pull(object sender, PushEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   177
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   178
            if(e.hand == Tracking.Gestures.PushDetector.Hand.NONE)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   179
                return;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   180
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   181
            String pushPull = "", hand = "";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   182
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   183
                pushPull = "PUSH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   184
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   185
                pushPull = "PULL";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   186
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   187
            if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   188
                hand = "LEFT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   189
            else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   190
                hand = "RIGHT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   191
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   192
                hand = "BOTH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   193
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   194
            Console.Out.WriteLine(pushPull + "-" + hand);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   195
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   196
            GesturePerformed(pushPull + "-" + hand);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   197
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   198
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   199
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   200
        * 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
   201
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   202
        public void GesturePerformed(String code)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   203
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   204
            //Si une gesture a été effectuée, on bloque un certain temps.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   205
            if (!gestureLocked)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   206
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   207
                gestureLocked = true;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   208
                
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   209
                //On crée un message contenant le code à envoyer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   210
                if (!messageCreated)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   211
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   212
                    messageCreated = true;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   213
                    server.AddTuioString(1, code);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   214
                    //On démarre le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   215
                    _timer.Start();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   216
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   217
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   218
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   219
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   220
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   221
        * Permet de convertir un point de position de noeud en Point3D.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   222
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   223
        private Point3D SkeletonPointToPoint3D(SkeletonPoint p)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   224
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   225
            return new Point3D((double)p.X, (double)p.Y, (double)p.Z);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   226
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   227
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   228
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   229
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   230
        * 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
   231
        * le temps d'être envoyés.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   232
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   233
        private void ThreadPoolCallback(Object threadContext)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   234
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   235
            while (true)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   236
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   237
                //On initialise le message OSC.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   238
                server.InitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   239
                //On l'envoie au client (au host et au port spécifiés dans le constructeur).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   240
                server.CommitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   241
                //On attend 25 ms.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   242
                Thread.Sleep(25);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   243
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   244
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   245
                if (messageCreated && !gestureLocked)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   246
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   247
                    //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
   248
                    messageCreated = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   249
                    server.DeleteTuioString(1);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   250
                }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   251
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   252
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   253
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   254
}