|
|
@@ -1,20 +1,16 @@
|
|
|
#!/usr/bin/env python
|
|
|
from OSC import OSCServer
|
|
|
+OSCServer.print_tracebacks = True
|
|
|
+
|
|
|
from logger import Logger
|
|
|
|
|
|
|
|
|
class TuioServer2D(Logger):
|
|
|
- _tuio_address = ('localhost', 3333)
|
|
|
-
|
|
|
- def __init__(self, handler_obj, **kwargs):
|
|
|
- super(TuioServer2D, self).__init__(**kwargs)
|
|
|
-
|
|
|
- for handler in ('point_down', 'point_up', 'point_move'):
|
|
|
- if not hasattr(handler_obj, handler):
|
|
|
- raise RuntimeError('Handler "%s" is not defined.' % handler)
|
|
|
+ __tuio_address__ = 'localhost', 3333
|
|
|
|
|
|
+ def __init__(self, handler_obj):
|
|
|
# OSC server that listens to incoming TUIO events
|
|
|
- self.server = OSCServer(self.__class__._tuio_address)
|
|
|
+ self.server = OSCServer(self.__tuio_address__)
|
|
|
self.server.addDefaultHandlers()
|
|
|
self.server.addMsgHandler('/tuio/2Dobj', self._receive)
|
|
|
self.server.addMsgHandler('/tuio/2Dcur', self._receive)
|
|
|
@@ -31,8 +27,8 @@ class TuioServer2D(Logger):
|
|
|
|
|
|
def _receive(self, addr, tags, data, source):
|
|
|
surface = addr[8:]
|
|
|
- self.log('Received message <surface=%s tags="%s" data=%s source=%s>' \
|
|
|
- % (surface, tags, data, source), 2)
|
|
|
+ #self.debug('Received message <surface=%s tags="%s" '
|
|
|
+ # 'data=%s source=%s>' % (surface, tags, data, source))
|
|
|
msg_type = data[0]
|
|
|
|
|
|
# FIXME: Ignore obj/blb events?
|
|
|
@@ -45,11 +41,11 @@ class TuioServer2D(Logger):
|
|
|
self.alive = alive
|
|
|
|
|
|
if released:
|
|
|
- self.log('Released %s.' % ', '.join(map(str, released)))
|
|
|
+ self.debug('Released %s.' % ', '.join(map(str, released)))
|
|
|
self.down -= released
|
|
|
|
|
|
for sid in released:
|
|
|
- self.handler_obj.point_up(sid)
|
|
|
+ self.handler_obj.on_point_up(sid)
|
|
|
elif msg_type == 'set':
|
|
|
sid, x, y = data[1:4]
|
|
|
|
|
|
@@ -59,40 +55,71 @@ class TuioServer2D(Logger):
|
|
|
# Check if 'point_down' has already been triggered. If so, trigger
|
|
|
# a 'point_move' event instead
|
|
|
if sid in self.down:
|
|
|
- self.log('Moved %d to (%s, %s).' % (sid, x, y))
|
|
|
- self.handler_obj.point_move(sid, x, y)
|
|
|
+ self.debug('Moved %d to (%s, %s).' % (sid, x, y))
|
|
|
+ self.handler_obj.on_point_move(sid, x, y)
|
|
|
else:
|
|
|
- self.log('Down %d at (%s, %s).' % (sid, x, y))
|
|
|
+ self.debug('Down %d at (%s, %s).' % (sid, x, y))
|
|
|
self.down.add(sid)
|
|
|
- self.handler_obj.point_down(sid, x, y)
|
|
|
+ self.handler_obj.on_point_down(sid, x, y)
|
|
|
|
|
|
def start(self):
|
|
|
try:
|
|
|
- self.log('Starting OSC server')
|
|
|
+ self.info('Starting OSC server')
|
|
|
self.server.serve_forever()
|
|
|
except SystemExit:
|
|
|
self.stop()
|
|
|
|
|
|
def stop(self):
|
|
|
- self.log('Stopping OSC server')
|
|
|
+ self.info('Stopping OSC server')
|
|
|
self.server.close()
|
|
|
|
|
|
|
|
|
+class TuioServerHandler(object):
|
|
|
+ """
|
|
|
+ Interface for touch servers. Defines point_up, point_move and point_down
|
|
|
+ handlers.
|
|
|
+ """
|
|
|
+ def on_point_down(self, sid, x, y):
|
|
|
+ raise NotImplementedError
|
|
|
+
|
|
|
+ def on_point_move(self, sid, x, y):
|
|
|
+ raise NotImplementedError
|
|
|
+
|
|
|
+ def on_point_up(self, sid):
|
|
|
+ raise NotImplementedError
|
|
|
+
|
|
|
+
|
|
|
if __name__ == '__main__':
|
|
|
- import sys
|
|
|
+ import argparse
|
|
|
+ import logging
|
|
|
+
|
|
|
+ parser = argparse.ArgumentParser(description='TUIO server test.')
|
|
|
+ parser.add_argument('--log', metavar='LOG_LEVEL', default='INFO',
|
|
|
+ choices=['DEBUG', 'INFO', 'WARNING'], help='Global log level.')
|
|
|
+ parser.add_argument('--logfile', metavar='FILENAME', help='Filename for '
|
|
|
+ 'the log file (the log is printed to stdout by default).')
|
|
|
+ args = parser.parse_args()
|
|
|
+
|
|
|
+ # Configure logger
|
|
|
+ log_config = dict(level=getattr(logging, args.log))
|
|
|
+
|
|
|
+ if args.logfile:
|
|
|
+ log_config['filename'] = args.logfile
|
|
|
+
|
|
|
+ Logger.configure(**log_config)
|
|
|
|
|
|
- class Handler(Logger):
|
|
|
- def point_down(self, sid, x, y):
|
|
|
- self.log('Point down: sid=%d (%s, %s)' % (sid, x, y))
|
|
|
+ # Define handlers
|
|
|
+ class Handler(TuioServerHandler, Logger):
|
|
|
+ def on_point_down(self, sid, x, y):
|
|
|
+ self.info('Point down: sid=%d (%s, %s)' % (sid, x, y))
|
|
|
|
|
|
- def point_up(self, sid):
|
|
|
- self.log('Point up: sid=%d' % sid)
|
|
|
+ def on_point_up(self, sid):
|
|
|
+ self.info('Point up: sid=%d' % sid)
|
|
|
|
|
|
- def point_move(self, sid, x, y):
|
|
|
- self.log('Point move: sid=%d (%s, %s)' % (sid, x, y))
|
|
|
+ def on_point_move(self, sid, x, y):
|
|
|
+ self.info('Point move: sid=%d (%s, %s)' % (sid, x, y))
|
|
|
|
|
|
- v = 1 if len(sys.argv) < 2 else int(sys.argv[1])
|
|
|
- server = TuioServer2D(Handler(verbose=v), verbose=v)
|
|
|
+ server = TuioServer2D(Handler())
|
|
|
|
|
|
try:
|
|
|
server.start()
|