import zmq
from msgpack import loads

ADDR = '127.0.0.1'
PORT = '50020'

class Tracker:
    
    def __init__(self, msgtype):
        self.context = zmq.Context()
        self.req = self.context.socket(zmq.REQ)
        self.req.connect('tcp://{}:{}'.format(ADDR, PORT))
        self.req.send_string('SUB_PORT')
        sub_port = self.req.recv_string()
        self.sub = self.context.socket(zmq.SUB)
        self.sub.connect('tcp://{}:{}'.format(ADDR, sub_port))
        topic = unicode(msgtype)
        if topic[-1] != '.' and topic != 'gaze': topic += u'.'
        self.sub.setsockopt_string(zmq.SUBSCRIBE, topic)

    def read_all(self):         # returns all currently available data
        data = []
        done = False
        while not done:
            try:
                topic = self.sub.recv_string(zmq.NOBLOCK)
                msg = self.sub.recv(zmq.NOBLOCK)
                data.append(loads(msg, encoding = 'utf-8'))
            except zmq.ZMQError:
                done = True
        return data
