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