58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import zmq
 | |
| import time
 | |
| import pickle
 | |
| import threading
 | |
| 
 | |
| from . import optitrack
 | |
| 
 | |
| 
 | |
| class OptiBridgeServer(threading.Thread):
 | |
|     def __init__(self, bridge_host, bridge_port,
 | |
|                  opti_addr, opti_port, obj_name):
 | |
|         threading.Thread.__init__(self)
 | |
|         self.daemon = True
 | |
| 
 | |
|         c = zmq.Context()
 | |
|         self.s = c.socket(zmq.PUB)
 | |
|         self.s.bind('tcp://{}:{}'.format(bridge_host, bridge_port))
 | |
| 
 | |
|         self.optitrack = optitrack.OptiTrackClient(opti_addr, opti_port, obj_name)
 | |
|         self.optitrack.start()
 | |
| 
 | |
|         self.obj_name = obj_name
 | |
| 
 | |
|     def run(self):
 | |
|         while True:
 | |
|             self.s.send(pickle.dumps(self.optitrack.recent_tracked_objects))
 | |
|             time.sleep(0.02)
 | |
| 
 | |
| 
 | |
| class OptiTrackClient(threading.Thread):
 | |
|     def __init__(self, bridge_host, bridge_port, obj_name):
 | |
|         threading.Thread.__init__(self)
 | |
|         self.daemon = True
 | |
| 
 | |
|         c = zmq.Context()
 | |
|         self.s = c.socket(zmq.SUB)
 | |
|         self.s.connect('tcp://{}:{}'.format(bridge_host, bridge_port))
 | |
|         self.s.setsockopt(zmq.SUBSCRIBE, '')
 | |
| 
 | |
|         self.obj_name = obj_name
 | |
|         self._tracked_obj = {}
 | |
| 
 | |
|     def run(self):
 | |
|         while True:
 | |
|             d = pickle.loads(self.s.recv())
 | |
|             self._tracked_obj = {
 | |
|                 k: d[k]
 | |
|                 for k in [k for k in list(d.keys()) if k in self.obj_name]
 | |
|             }
 | |
| 
 | |
|     @property
 | |
|     def tracked_objects(self):
 | |
|         return self._tracked_obj
 | |
| 
 | |
|     @property
 | |
|     def recent_tracked_objects(self):
 | |
|         return self.tracked_objects
 |