def setData(self, message):
        # print "got data"
        #first time round - can't start senders till we establish the channels
        if self.offset is None:
            self.offset = (time.time() - message["data"][0][0]) + self.latency
            self.channel_count = len(message["channelnames"])
            self.channels = message["channelnames"]
            self.channeltypes = message["channeltypes"]
            for i in range(self.channel_count):
                self.outbuffers[i] = [None] * self.buffer_size
                self.outqueuebuffers[i] = deque([], 1000)
                self.senders[i] = ChildDataSender(i, self)
                self.senders[i].start()
            if self.debug:
                print "Got Data:", len(self.outbuffers)            
            self.senderParent.start()
            # print "finished initial setup"
        self.mutex.acquire()

        for i in range(len(message["data"])):

            self.timestamp_buffer[self.index] = message["data"][i][0]
            vals = message["data"][i][1]

            for j in range(len(vals)):
                self.outbuffers[j][self.index] = vals[j]

            self.index += 1
            if self.index >= self.buffer_size:
                self.index = 0

        self.mutex.release()

        if not self.setupDone:
            self.delThread = PubNubReceiverDeliveryThread(self)
            self.delThread.start()
            self.setupDone = True
            # print message
            # print "started thread"


        return True
class PubnubCollector():

    def run(self, port, channel, latency, bufferSize):
        self.mutex = Lock()
        self.port = port
        self.outqueuebuffers = {}
        self.outbuffers = {}
        self.senders = {}
        self.channels = None
        self.senderParent=SenderParent(self.port,self)
        self.channel = channel
        self.buffer_size = bufferSize
        self.timestamp_buffer = [None] * self.buffer_size
        self.debug = False

        self.index = 0;
        self.offset = None
        self.latency = latency
        self.setupDone = False
        self.channel_count = 0

        pubnub = Pubnub("pub-c-e655613e-f776-4301-9f29-f71edbcd6559",
                        "sub-c-2eafcf66-c636-11e3-8dcd-02ee2ddab7fe",
                        "sec-c-ZjUwZDgzMTItYzE2Mi00ZGYyLTg2NGMtNmE5N2Q3MGI0MTli",
                        False)

        

        while(True):
            
            pubnub.subscribe({
                'channel': self.channel,
                'callback': self.setData
                })

    def getData(self, port):
        if len(self.outqueuebuffers[port]) > 0:
            return self.outqueuebuffers[port].popleft()
        else:
            return None

    def setData(self, message):
        # print "got data"
        #first time round - can't start senders till we establish the channels
        if self.offset is None:
            self.offset = (time.time() - message["data"][0][0]) + self.latency
            self.channel_count = len(message["channelnames"])
            self.channels = message["channelnames"]
            self.channeltypes = message["channeltypes"]
            for i in range(self.channel_count):
                self.outbuffers[i] = [None] * self.buffer_size
                self.outqueuebuffers[i] = deque([], 1000)
                self.senders[i] = ChildDataSender(i, self)
                self.senders[i].start()
            if self.debug:
                print "Got Data:", len(self.outbuffers)            
            self.senderParent.start()
            # print "finished initial setup"
        self.mutex.acquire()

        for i in range(len(message["data"])):

            self.timestamp_buffer[self.index] = message["data"][i][0]
            vals = message["data"][i][1]

            for j in range(len(vals)):
                self.outbuffers[j][self.index] = vals[j]

            self.index += 1
            if self.index >= self.buffer_size:
                self.index = 0

        self.mutex.release()

        if not self.setupDone:
            self.delThread = PubNubReceiverDeliveryThread(self)
            self.delThread.start()
            self.setupDone = True
            # print message
            # print "started thread"


        return True


    def getMultiStream(self,queryString):
        if self.senders.has_key(int(queryString)):
            return self.senders[int(queryString)]
        return None