front_idill/extern/fajran-npTuioClient/TuioClient/TuioClient.cpp
author bastiena
Thu, 12 Apr 2012 15:33:25 +0200
changeset 28 9ccef81f02ab
parent 27 6c08d4d7219e
permissions -rw-r--r--
Charset set to UTF-8 without bom tab replaced by 4 spaces \r\n replaced by \n in non cs files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     1
/*
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
     2
    TUIO C++ Library - part of the reacTIVision project
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
     3
    http://reactivision.sourceforge.net/
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     4
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
     5
    Copyright (c) 2005-2008 Martin Kaltenbrunner <mkalten@iua.upf.edu>
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     6
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     7
    This program is free software; you can redistribute it and/or modify
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     8
    it under the terms of the GNU General Public License as published by
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
     9
    the Free Software Foundation; either version 2 of the License, or
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    10
    (at your option) any later version.
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    11
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    12
    This program is distributed in the hope that it will be useful,
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    15
    GNU General Public License for more details.
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    16
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    17
    You should have received a copy of the GNU General Public License
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    18
    along with this program; if not, write to the Free Software
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    19
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    20
*/
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    21
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    22
/*
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    23
    Modified by alexandre.bastien@iri.centrepompidou.fr to manage TUIO strings.
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    24
*/
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    25
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    26
#include "TuioClient.h"
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    27
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    28
#ifndef WIN32
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    29
static void* ThreadFunc( void* obj )
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    30
#else
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    31
static DWORD WINAPI ThreadFunc( LPVOID obj )
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    32
#endif
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    33
{
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    34
    static_cast<TuioClient*>(obj)->socket->Run();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    35
    return 0;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    36
};
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
    37
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
    38
using namespace std;
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    39
    
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    40
TuioClient::TuioClient() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    41
    TuioClient(3333);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    42
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    43
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    44
TuioClient::TuioClient(int port) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    45
    try {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    46
        socket = new UdpListeningReceiveSocket(IpEndpointName( IpEndpointName::ANY_ADDRESS, port ), this );
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    47
    } catch (std::exception &e) { 
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    48
        std::cout << "could not bind to UDP port " << port << std::endl;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    49
        socket = NULL;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    50
    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    51
    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    52
    if (socket!=NULL) {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    53
        if (!socket->IsBound()) {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    54
            delete socket;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    55
            socket = NULL;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    56
        } else std::cout << "listening to TUIO messages on UDP port " << port << std::endl;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    57
    }
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    58
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    59
    locked = false;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    60
    running = false;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    61
    currentFrame = lastFrame = maxFingerID = maxStringID = -1;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    62
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    63
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    64
TuioClient::~TuioClient() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    65
    delete socket;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    66
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    67
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    68
void TuioClient::ProcessBundle( const ReceivedBundle& b, const IpEndpointName& remoteEndpoint) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    69
    for( ReceivedBundle::const_iterator i = b.ElementsBegin(); i != b.ElementsEnd(); ++i ){
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    70
        if( i->IsBundle() )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    71
            ProcessBundle( ReceivedBundle(*i), remoteEndpoint);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    72
        else
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    73
            ProcessMessage( ReceivedMessage(*i), remoteEndpoint);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    74
    }
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    75
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    76
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
    77
void TuioClient::ProcessMessage( const ReceivedMessage& msg, const IpEndpointName& remoteEndpoint)
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
    78
{
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    79
    try
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    80
    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    81
        ReceivedMessageArgumentStream args = msg.ArgumentStream();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    82
        ReceivedMessage::const_iterator arg = msg.ArgumentsBegin();
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    83
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    84
        if( strcmp( msg.AddressPattern(), "/tuio/2Dobj" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    85
        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    86
            const char* cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    87
            args >> cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    88
            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    89
            if( strcmp( cmd, "set" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    90
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    91
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    92
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    93
                int32 s_id, f_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    94
                float xpos, ypos, angle, xspeed, yspeed, rspeed, maccel, raccel;
24
2bdf5d51d434 Front IDILL :
bastiena
parents: 21
diff changeset
    95
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    96
                args >> s_id >> f_id >> xpos >> ypos >> angle >> xspeed >> yspeed >> rspeed >> maccel >> raccel >> EndMessage;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
    97
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    98
                std::list<TuioObject*>::iterator tobj;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
    99
                for (tobj=objectList.begin(); tobj!= objectList.end(); tobj++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   100
                    if((*tobj)->getSessionID()==(long)s_id) break;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   101
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   102
                if (tobj == objectList.end())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   103
                {
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   104
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   105
                    TuioObject *addObject = new TuioObject((long)s_id,(int)f_id,xpos,ypos,angle);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   106
                    objectList.push_back(addObject);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   107
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   108
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   109
                        (*listener)->addTuioObject(addObject);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   110
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   111
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   112
                else if ( ((*tobj)->getX()!=xpos) || ((*tobj)->getY()!=ypos) || ((*tobj)->getAngle()!=angle) || ((*tobj)->getXSpeed()!=xspeed) || ((*tobj)->getYSpeed()!=yspeed) || ((*tobj)->getRotationSpeed()!=rspeed) || ((*tobj)->getMotionAccel()!=maccel) || ((*tobj)->getRotationAccel()!=raccel) )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   113
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   114
                    (*tobj)->update(xpos,ypos,angle,xspeed,yspeed,rspeed,maccel,raccel);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   115
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   116
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   117
                        (*listener)->updateTuioObject((*tobj));
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   118
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   119
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   120
            else if( strcmp( cmd, "alive" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   121
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   122
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   123
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   124
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   125
                while(!args.Eos())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   126
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   127
                    args >> s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   128
                    objectBuffer.push_back((long)s_id);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   129
                    std::list<long>::iterator iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   130
                    iter = find(aliveObjectList.begin(), aliveObjectList.end(), (long)s_id); 
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   131
                    if (iter != aliveObjectList.end()) aliveObjectList.erase(iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   132
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   133
                args >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   134
                
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   135
                std::list<long>::iterator alive_iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   136
                for (alive_iter=aliveObjectList.begin(); alive_iter != aliveObjectList.end(); alive_iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   137
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   138
                    std::list<TuioObject*>::iterator tobj;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   139
                    for (tobj=objectList.begin(); tobj!=objectList.end(); tobj++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   140
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   141
                        TuioObject *deleteObject = (*tobj);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   142
                        if(deleteObject->getSessionID()==*alive_iter)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   143
                        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   144
                            deleteObject->remove();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   145
                            for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   146
                                (*listener)->removeTuioObject(deleteObject);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   147
                            objectList.erase(tobj);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   148
                            delete deleteObject;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   149
                            break;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   150
                        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   151
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   152
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   153
                aliveObjectList = objectBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   154
                objectBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   155
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   156
            else if( strcmp( cmd, "fseq" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   157
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   158
                if(currentFrame>0) lastFrame = currentFrame;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   159
                args >> currentFrame  >> EndMessage;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   160
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   161
                if ((currentFrame>=lastFrame) || (currentFrame<0))
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   162
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   163
                    long currentTime = lastTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   164
                    if (currentFrame>lastFrame)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   165
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   166
                        currentTime = getCurrentTime()-startTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   167
                        lastTime = currentTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   168
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   169
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   170
                    for (std::list<TuioObject*>::iterator refreshObject=objectList.begin(); refreshObject!=objectList.end(); refreshObject++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   171
                        if ((*refreshObject)->getUpdateTime()==TUIO_UNDEFINED) (*refreshObject)->setUpdateTime(currentTime);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   172
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   173
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener!=listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   174
                        (*listener)->refresh(currentTime);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   175
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   176
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   177
        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   178
        else if( strcmp( msg.AddressPattern(), "/tuio/3Dcur" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   179
        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   180
            const char* cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   181
            args >> cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   182
            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   183
            if( strcmp( cmd, "set" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   184
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   185
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   186
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   187
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   188
                float xpos, ypos, zpos, xspeed, yspeed, maccel;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   189
                //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   190
                args >> s_id >> xpos >> ypos >> zpos >> xspeed >> yspeed >> maccel >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   191
                std::list<TuioCursor*>::iterator tcur;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   192
                for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   193
                    if((*tcur)->getSessionID()==(long)s_id) break;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   194
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   195
                if (tcur == cursorList.end())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   196
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   197
                    int f_id = (int)cursorList.size();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   198
                    if ((int)(cursorList.size())<=maxFingerID)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   199
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   200
                        std::list<TuioCursor*>::iterator closestCursor = freeCursorList.begin();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   201
                        //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   202
                        for(std::list<TuioCursor*>::iterator testCursor = freeCursorList.begin();testCursor!= freeCursorList.end(); testCursor++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   203
                        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   204
                            if((*testCursor)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   205
                        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   206
                        f_id = (*closestCursor)->getFingerID();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   207
                        freeCursorList.erase(closestCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   208
                        delete *closestCursor;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   209
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   210
                    else maxFingerID = f_id;    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   211
                    //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   212
                    TuioCursor *addCursor = new TuioCursor((long)s_id,f_id,xpos,ypos,zpos);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   213
                    cursorList.push_back(addCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   214
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   215
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   216
                        (*listener)->addTuioCursor(addCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   217
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   218
                //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   219
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   220
                else if ( ((*tcur)->getX()!=xpos) || ((*tcur)->getY()!=ypos) || ((*tcur)->getZ()!=zpos) || ((*tcur)->getXSpeed()!=xspeed) || ((*tcur)->getYSpeed()!=yspeed) || ((*tcur)->getMotionAccel()!=maccel) )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   221
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   222
                    (*tcur)->update(xpos,ypos,zpos,xspeed,yspeed,maccel);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   223
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   224
                        (*listener)->updateTuioCursor((*tcur));
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   225
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   226
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   227
            else if( strcmp( cmd, "alive" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   228
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   229
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   230
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   231
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   232
                while(!args.Eos())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   233
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   234
                    args >> s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   235
                    cursorBuffer.push_back((long)s_id);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   236
                    std::list<long>::iterator iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   237
                    iter = find(aliveCursorList.begin(), aliveCursorList.end(), (long)s_id); 
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   238
                    if (iter != aliveCursorList.end()) aliveCursorList.erase(iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   239
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   240
                args >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   241
                std::list<long>::iterator alive_iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   242
                for (alive_iter=aliveCursorList.begin(); alive_iter != aliveCursorList.end(); alive_iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   243
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   244
                    std::list<TuioCursor*>::iterator tcur;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   245
                    for (tcur=cursorList.begin(); tcur != cursorList.end(); tcur++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   246
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   247
                        TuioCursor *deleteCursor = (*tcur);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   248
                        if(deleteCursor->getSessionID()==*alive_iter)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   249
                        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   250
                            cursorList.erase(tcur);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   251
                            deleteCursor->remove();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   252
                            for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   253
                                (*listener)->removeTuioCursor(deleteCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   254
                            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   255
                            if (deleteCursor->getFingerID()==maxFingerID)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   256
                            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   257
                                maxFingerID = -1;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   258
                                delete deleteCursor;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   259
                                
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   260
                                if (cursorList.size()>0)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   261
                                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   262
                                    std::list<TuioCursor*>::iterator clist;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   263
                                    for (clist=cursorList.begin(); clist != cursorList.end(); clist++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   264
                                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   265
                                        int f_id = (*clist)->getFingerID();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   266
                                        if (f_id>maxFingerID) maxFingerID=f_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   267
                                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   268
                                    std::list<TuioCursor*>::iterator flist;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   269
                                    for (flist=freeCursorList.begin(); flist != freeCursorList.end(); flist++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   270
                                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   271
                                        TuioCursor *freeCursor = (*flist);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   272
                                        if (freeCursor->getFingerID()>maxFingerID) delete freeCursor;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   273
                                        else freeCursorBuffer.push_back(freeCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   274
                                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   275
                                    freeCursorList = freeCursorBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   276
                                    freeCursorBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   277
                                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   278
                            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   279
                            else if (deleteCursor->getFingerID()<maxFingerID) freeCursorList.push_back(deleteCursor);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   280
                            break;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   281
                        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   282
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   283
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   284
                aliveCursorList = cursorBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   285
                cursorBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   286
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   287
            else if( strcmp( cmd, "fseq" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   288
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   289
                if(currentFrame>0) lastFrame = currentFrame;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   290
                args >> currentFrame  >> EndMessage;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   291
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   292
                if ((currentFrame>=lastFrame) || (currentFrame<0))
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   293
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   294
                    long currentTime = lastTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   295
                    if (currentFrame>lastFrame)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   296
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   297
                        currentTime = getCurrentTime()-startTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   298
                        lastTime = currentTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   299
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   300
                    for (std::list<TuioCursor*>::iterator refreshCursor=cursorList.begin(); refreshCursor!=cursorList.end(); refreshCursor++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   301
                        if ((*refreshCursor)->getUpdateTime()==TUIO_UNDEFINED) (*refreshCursor)->setUpdateTime(currentTime);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   302
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   303
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   304
                        (*listener)->refresh(currentTime);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   305
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   306
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   307
        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   308
        else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   309
        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   310
            const char* cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   311
            args >> cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   312
            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   313
            if( strcmp( cmd, "set" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   314
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   315
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   316
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   317
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   318
                const char* code;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   319
                args >> s_id >> code >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   320
                std::list<TuioString*>::iterator tstr;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   321
                for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   322
                    if((*tstr)->getSessionID()==(long)s_id) break;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   323
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   324
                if (tstr == stringList.end())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   325
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   326
                    int s_id = (int)stringList.size();//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   327
                    if ((int)(stringList.size())<=maxStringID)//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   328
                    {//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   329
                        std::list<TuioString*>::iterator closestString = freeStringList.begin();//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   330
                        //Modifié par alexandre.bastien@iri.centrepompidou.fr
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   331
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   332
                        //for(std::list<TuioString*>::iterator testString = freeStringList.begin();testString!= freeStringList.end(); testString++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   333
                        //{
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   334
                            //if((*testString)->getDistance(xpos,ypos,zpos)<(*closestCursor)->getDistance(xpos,ypos,zpos)) closestCursor = testCursor;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   335
                        //}
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   336
                        s_id = (*closestString)->getStringID();//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   337
                        freeStringList.erase(closestString);//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   338
                        delete *closestString;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   339
                    }//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   340
                    else maxStringID = s_id;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   341
                    //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   342
                    TuioString *addString = new TuioString((long)s_id,-1,code);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   343
                    stringList.push_back(addString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   344
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   345
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   346
                        (*listener)->addTuioString(addString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   347
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   348
                //Modifié par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   349
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   350
                else if ( ((*tstr)->getCode()!=code) )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   351
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   352
                    (*tstr)->update(code);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   353
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   354
                        (*listener)->updateTuioString((*tstr));
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   355
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   356
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   357
            else if( strcmp( cmd, "alive" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   358
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   359
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   360
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   361
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   362
                while(!args.Eos())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   363
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   364
                    args >> s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   365
                    stringBuffer.push_back((long)s_id);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   366
                    std::list<long>::iterator iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   367
                    iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); 
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   368
                    if (iter != aliveStringList.end()) aliveStringList.erase(iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   369
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   370
                args >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   371
                std::list<long>::iterator alive_iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   372
                for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   373
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   374
                    std::list<TuioString*>::iterator tstr;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   375
                    for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   376
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   377
                        TuioString *deleteString = (*tstr);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   378
                        if(deleteString->getSessionID()==*alive_iter)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   379
                        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   380
                            stringList.erase(tstr);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   381
                            deleteString->remove();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   382
                            for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   383
                                (*listener)->removeTuioString(deleteString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   384
                            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   385
                            if (deleteString->getStringID()==maxStringID)//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   386
                            {//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   387
                                maxStringID = -1;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   388
                                delete deleteString;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   389
                                
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   390
                                if (stringList.size()>0)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   391
                                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   392
                                    std::list<TuioString*>::iterator clist;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   393
                                    for (clist=stringList.begin(); clist != stringList.end(); clist++)//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   394
                                    {//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   395
                                        int s_id = (*clist)->getStringID();//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   396
                                        if (s_id>maxStringID) maxStringID=s_id;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   397
                                    }//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   398
                                    std::list<TuioString*>::iterator flist;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   399
                                    for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   400
                                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   401
                                        TuioString *freeString = (*flist);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   402
                                        if (freeString->getStringID()>maxStringID) delete freeString;//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   403
                                        else freeStringBuffer.push_back(freeString);//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   404
                                        freeStringBuffer.push_back(freeString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   405
                                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   406
                                    freeStringList = freeStringBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   407
                                    freeStringBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   408
                                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   409
                            }//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   410
                            else if (deleteString->getStringID()<maxStringID) freeStringList.push_back(deleteString);//
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   411
                            break;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   412
                        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   413
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   414
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   415
                aliveStringList = stringBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   416
                stringBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   417
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   418
            else if( strcmp( cmd, "fseq" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   419
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   420
                if(currentFrame>0) lastFrame = currentFrame;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   421
                args >> currentFrame  >> EndMessage;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   422
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   423
                if ((currentFrame>=lastFrame) || (currentFrame<0))
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   424
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   425
                    long currentTime = lastTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   426
                    if (currentFrame>lastFrame)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   427
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   428
                        currentTime = getCurrentTime()-startTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   429
                        lastTime = currentTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   430
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   431
                    for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   432
                        if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   433
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   434
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   435
                        (*listener)->refresh(currentTime);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   436
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   437
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   438
        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   439
        //Ajouté par alexandre.bastien@iri.centrepompidou.fr
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   440
        /*else if( strcmp( msg.AddressPattern(), "/tuio/_siP" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   441
        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   442
            const char* cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   443
            args >> cmd;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   444
            
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   445
            if( strcmp( cmd, "set" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   446
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   447
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   448
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   449
                const char* code;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   450
                args >> s_id >> code >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   451
                std::list<TuioString*>::iterator tstr;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   452
                for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   453
                    if((*tstr)->getSessionID()==(long)s_id) break;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   454
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   455
                if (tstr == stringList.end())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   456
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   457
                    TuioString *addString = new TuioString((long)s_id,code);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   458
                    stringList.push_back(addString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   459
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   460
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   461
                        (*listener)->addTuioString(addString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   462
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   463
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   464
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   465
                else if ( ((*tstr)->getCode()!=code) )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   466
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   467
                    (*tstr)->update(code);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   468
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   469
                        (*listener)->updateTuioString((*tstr));
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   470
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   471
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   472
            else if( strcmp( cmd, "alive" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   473
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   474
                if ((currentFrame<lastFrame) && (currentFrame>0)) return;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   475
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   476
                int32 s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   477
                while(!args.Eos())
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   478
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   479
                    args >> s_id;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   480
                    stringBuffer.push_back((long)s_id);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   481
                    std::list<long>::iterator iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   482
                    iter = find(aliveStringList.begin(), aliveStringList.end(), (long)s_id); 
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   483
                    if (iter != aliveStringList.end()) aliveStringList.erase(iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   484
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   485
                args >> EndMessage;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   486
                
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   487
                std::list<long>::iterator alive_iter;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   488
                for (alive_iter=aliveStringList.begin(); alive_iter != aliveStringList.end(); alive_iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   489
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   490
                    std::list<TuioString*>::iterator tstr;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   491
                    for (tstr=stringList.begin(); tstr != stringList.end(); tstr++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   492
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   493
                        TuioString *deleteString = (*tstr);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   494
                        if(deleteString->getSessionID()==*alive_iter)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   495
                        {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   496
                            stringList.erase(tstr);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   497
                            deleteString->remove();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   498
                            for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   499
                                (*listener)->removeTuioString(deleteString);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   500
                                
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   501
                            if (stringList.size()>0)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   502
                            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   503
                                std::list<TuioString*>::iterator flist;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   504
                                for (flist=freeStringList.begin(); flist != freeStringList.end(); flist++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   505
                                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   506
                                    TuioString *freeString = (*flist);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   507
                                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   508
                                freeStringList = freeStringBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   509
                                freeStringBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   510
                            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   511
                        }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   512
                        break;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   513
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   514
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   515
                aliveStringList = stringBuffer;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   516
                stringBuffer.clear();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   517
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   518
            else if( strcmp( cmd, "fseq" ) == 0 )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   519
            {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   520
                if(currentFrame>0) lastFrame = currentFrame;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   521
                args >> currentFrame  >> EndMessage;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   522
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   523
                if ((currentFrame>=lastFrame) || (currentFrame<0))
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   524
                {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   525
                    long currentTime = lastTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   526
                    if (currentFrame>lastFrame)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   527
                    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   528
                        currentTime = getCurrentTime()-startTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   529
                        lastTime = currentTime;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   530
                    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   531
                    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   532
                    for (std::list<TuioString*>::iterator refreshString=stringList.begin(); refreshString!=stringList.end(); refreshString++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   533
                        if ((*refreshString)->getUpdateTime()==TUIO_UNDEFINED) (*refreshString)->setUpdateTime(currentTime);
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   534
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   535
                    for (std::list<TuioListener*>::iterator listener=listenerList.begin(); listener != listenerList.end(); listener++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   536
                        (*listener)->refresh(currentTime);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   537
                }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   538
            }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   539
        }*/
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   540
    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   541
    catch( Exception& e )
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   542
    {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   543
        std::cout << "error while parsing message: "<< msg.AddressPattern() << ": " << e.what() << "\n";
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   544
    }
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   545
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   546
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   547
void TuioClient::ProcessPacket( const char *data, int size, const IpEndpointName& remoteEndpoint ) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   548
    if (listenerList.size()==0) return;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   549
    ReceivedPacket p( data, size );
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   550
    if(p.IsBundle()) ProcessBundle( ReceivedBundle(p), remoteEndpoint);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   551
        else ProcessMessage( ReceivedMessage(p), remoteEndpoint);
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   552
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   553
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   554
void TuioClient::start(bool lk) {
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   555
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   556
    if (socket==NULL) return;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   557
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   558
    locked = lk;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   559
    if (!locked) {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   560
        #ifndef WIN32
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   561
        pthread_create(&thread , NULL, ThreadFunc, this);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   562
        #else
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   563
        DWORD threadId;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   564
        thread = CreateThread( 0, 0, ThreadFunc, this, 0, &threadId );
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   565
        #endif
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   566
    } else socket->Run();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   567
    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   568
    startTime = getCurrentTime();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   569
    lastTime = 0;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   570
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   571
    running = true;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   572
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   573
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   574
void TuioClient::stop() {
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   575
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   576
    if (socket==NULL) return;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   577
    socket->Break();
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   578
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   579
    if (!locked) {
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   580
        #ifdef WIN32
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   581
        if( thread ) CloseHandle( thread );
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   582
        #endif
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   583
        thread = 0;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   584
        locked = false;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   585
    }
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   586
    running = false;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   587
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   588
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   589
void TuioClient::addTuioListener(TuioListener *listener) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   590
    listenerList.push_back(listener);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   591
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   592
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   593
void TuioClient::removeTuioListener(TuioListener *listener) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   594
    std::list<TuioListener*>::iterator result = find(listenerList.begin(),listenerList.end(),listener);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   595
    if (result!=listenerList.end()) listenerList.remove(listener);
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   596
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   597
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   598
TuioObject* TuioClient::getTuioObject(long s_id) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   599
    for (std::list<TuioObject*>::iterator iter=objectList.begin(); iter != objectList.end(); iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   600
        if((*iter)->getSessionID()==s_id) return (*iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   601
        
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   602
    return NULL;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   603
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   604
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   605
TuioCursor* TuioClient::getTuioCursor(long s_id) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   606
    for (std::list<TuioCursor*>::iterator iter=cursorList.begin(); iter != cursorList.end(); iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   607
        if((*iter)->getSessionID()==s_id) return (*iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   608
        
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   609
    return NULL;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   610
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   611
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   612
TuioString* TuioClient::getTuioString(long s_id) {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   613
    for (std::list<TuioString*>::iterator iter=stringList.begin(); iter != stringList.end(); iter++)
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   614
        if((*iter)->getSessionID()==s_id) return (*iter);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   615
        
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   616
    return NULL;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   617
}
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   618
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   619
std::list<TuioObject*> TuioClient::getTuioObjects() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   620
    return objectList;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   621
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   622
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   623
std::list<TuioCursor*> TuioClient::getTuioCursors() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   624
    return cursorList;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   625
}
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   626
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   627
std::list<TuioString*> TuioClient::getTuioStrings() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   628
    return stringList;
27
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   629
}
6c08d4d7219e Middleware :
bastiena
parents: 25
diff changeset
   630
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   631
long TuioClient::getCurrentTime() {
28
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   632
    
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   633
    #ifdef WIN32
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   634
        long timestamp = GetTickCount();
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   635
    #else
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   636
        struct timeval tv;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   637
        struct timezone tz;
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   638
        gettimeofday(&tv,&tz);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   639
        long timestamp = (tv.tv_sec*1000)+(tv.tv_usec/1000);
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   640
    #endif
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   641
        
9ccef81f02ab Charset set to UTF-8 without bom
bastiena
parents: 27
diff changeset
   642
        return timestamp;
21
e4e5f02787a1 Front IDILL :
bastiena
parents:
diff changeset
   643
}