middleware/src/Communication/Server.cs
author bastiena
Fri, 30 Mar 2012 11:14:14 +0200
changeset 14 10d5199d9874
parent 11 a1bf0d21022e
permissions -rw-r--r--
Middleware : Mod transition stabilized. Order : NO_USER > USER_INCOMING > SHOWMOS_# > MOSAIC
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;
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
    56
        private bool gestureLocked, modLocked;
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;
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
    63
        //Dernier code envoyé.
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
    64
        private String lastCode;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
        * 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
    69
        * s'il reçoit des notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
        */
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    71
        public Server(String host, int port, int _timerElapsing, DebugWindow _debug)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
        {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    73
            debug = _debug;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    74
            rm = new ResourceManager("Trakers.Properties.resources", Assembly.GetExecutingAssembly());
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    75
            //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
    76
            leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
            rightHandCursorCreated = false;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    78
            messageCreated = false;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    79
            gestureLocked = false;
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
    80
            modLocked = false;
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
    81
            lastCode = "";
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    82
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    83
            timerElapsing = _timerElapsing;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    84
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    85
            try
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    86
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    87
                //On démarre le serveur TUIO.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    88
                server = new TuioServer(host, port);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    89
                //On initialise le threadPool (appelé toutes les N ms).
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    90
                ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    91
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    92
                //On instancie le timer à N ms.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    93
                _timer = new System.Timers.Timer(timerElapsing);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    94
                //Dès que le timer est expiré, on appelle _timer_Elapsed.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    95
                _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    96
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    97
            catch (Exception)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    98
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    99
                debug.ExceptionLbl.Content = rm.GetString("serverCantStart");
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   100
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
        * Getter du serveur.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
        public TuioServer getServer()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
            return server;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
        /*
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   112
         * Méthode appelée à l'expiration du timer pour les gestures et modes.
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   113
         */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   114
        public void _timer_Elapsed(object sender, ElapsedEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   115
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   116
            //On débloque la détection de gesture.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   117
            gestureLocked = false;
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   118
            //On débloque la notification de nouveau mode.
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   119
            modLocked = false;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   120
            //On arrête le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   121
            _timer.Stop();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   122
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   123
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   124
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
        public void LeftHandTracked(object sender, LeftHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
            if (!leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
                server.AddTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
                leftHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
                server.UpdateTuioCursor(0, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
        public void RightHandTracked(object sender, RightHandTrackedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   147
            //Si le curseur de la main droite n'est pas créé, alors on le crée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   148
            if (!rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   149
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   150
                server.AddTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
                rightHandCursorCreated = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   152
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   153
            //S'il existe, on le met simplement à jour.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   154
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   155
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   156
                server.UpdateTuioCursor(1, SkeletonPointToPoint3D(e.handJoint.Position));
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   157
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   158
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   159
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   160
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   161
        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   162
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   163
        public void LeftHandQuit(object sender, LeftHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   164
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   165
            //Si le curseur de la main gauche existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   166
            if (leftHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   167
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   168
                server.DeleteTuioCursor(0);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   169
                leftHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   170
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   175
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   176
        public void RightHandQuit(object sender, RightHandQuitEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   177
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   178
            //Si le curseur de la main droite existe, alors on le supprime.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   179
            if (rightHandCursorCreated)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   180
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   181
                server.DeleteTuioCursor(1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   182
                rightHandCursorCreated = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   183
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   184
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   185
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   186
        /*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   187
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un swipe.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   188
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   189
        public void Swipe(object sender, SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   190
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   191
            if (e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   192
                GesturePerformed("SWIPE LEFT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   193
            else if (e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   194
                GesturePerformed("SWIPE RIGHT");
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   195
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   196
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   197
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   198
        * Méthode appelée lors d'une notification de type : l'utilisateur fait un push/pull.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   199
        */
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   200
        public void Push(object sender, PushEventArgs e)
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   201
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   202
            if(e.hand == Tracking.Gestures.PushDetector.Hand.NONE)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   203
                return;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   204
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   205
            String pushPull = "", hand = "";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   206
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   207
                pushPull = "PUSH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   208
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   209
                pushPull = "PULL";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   210
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   211
            if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   212
                hand = "LEFT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   213
            else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   214
                hand = "RIGHT";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   215
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   216
                hand = "BOTH";
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   217
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   218
            GesturePerformed(pushPull + "-" + hand);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   219
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   220
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   221
        /*
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   222
        * 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
   223
        */
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   224
        public void GesturePerformed(String code)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   225
        {
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   226
            //Si le code vient d'être envoyé, on passe.
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   227
            if (lastCode.Equals(code))
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   228
                return;
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   229
            lastCode = code;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   230
            //Si une gesture a été effectuée, on bloque un certain temps.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   231
            if (!gestureLocked)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   232
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   233
                gestureLocked = true;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   234
                
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   235
                //On crée un message contenant le code à envoyer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   236
                if (!messageCreated)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   237
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   238
                    messageCreated = true;
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   239
                    Console.Out.WriteLine("A 2");
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   240
                    server.AddTuioString(2, code);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   241
                    //On démarre le timer.
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   242
                    _timer.Start();
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   243
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   244
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   245
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   246
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   247
        /*
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   248
        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   249
        */
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   250
        public void ModeNotification(String code)
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   251
        {
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   252
            //Si le code vient d'être envoyé, on passe.
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   253
            if (lastCode.Equals(code))
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   254
                return;
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   255
            lastCode = code;
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   256
            //Si on a été notifié.
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   257
            if (!modLocked)
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   258
            {
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   259
                modLocked = true;
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   260
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   261
                //On crée un message contenant le code à envoyer.
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   262
                if (!messageCreated)
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   263
                {
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   264
                    messageCreated = true;
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   265
                    Console.Out.WriteLine("A 3");
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   266
                    server.AddTuioString(2, code);
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   267
                    //On démarre le timer.
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   268
                    _timer.Start();
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   269
                }
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   270
            }
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   271
        }
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   272
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   273
        /*
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   274
        * Permet de convertir un point de position de noeud en Point3D.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   275
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   276
        private Point3D SkeletonPointToPoint3D(SkeletonPoint p)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   277
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   278
            return new Point3D((double)p.X, (double)p.Y, (double)p.Z);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   279
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   280
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   281
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   282
        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   283
        * 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
   284
        * le temps d'être envoyés.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   285
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   286
        private void ThreadPoolCallback(Object threadContext)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   287
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   288
            while (true)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   289
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   290
                //On initialise le message OSC.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   291
                server.InitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   292
                //On l'envoie au client (au host et au port spécifiés dans le constructeur).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   293
                server.CommitFrame();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   294
                //On attend 25 ms.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   295
                Thread.Sleep(25);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   296
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   297
                //Si une gesture a été effectuée et que le délai d'attente est expiré.
11
a1bf0d21022e Middleware :
bastiena
parents: 8
diff changeset
   298
                if (messageCreated && !gestureLocked && !modLocked)
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   299
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   300
                    //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
   301
                    messageCreated = false;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   302
                    server.DeleteTuioString(2);
14
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   303
                    //server.DeleteTuioString(3);
10d5199d9874 Middleware :
bastiena
parents: 11
diff changeset
   304
                    Console.Out.WriteLine("R");
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   305
                }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   306
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   307
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   308
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   309
}