Exemple #1
0
    def run_main_loop(
        self
    ):  # TODO: check channel proxies health, if not synchronized too long, should kill it.
        assert not self.__running

        self.__running = True

        try:
            self.__socket.listen(5)
            while self.__running:
                s, addr = self.__socket.accept()
                if not self.__running:
                    break

                try:
                    ret = apiclient.connect(conf.USER_NAME, conf.PASSWORD,
                                            self.__sensor_name)
                except Exception:
                    traceback.print_exc()
                    time.sleep(3.0)
                    continue

                if ret:
                    channel_server_address, channel, transfer_channel_server_address = ret
                    rx_channel = 'rx-' + str(uuid.uuid4())
                    tx_channel = 'tx-' + str(uuid.uuid4())

                    proxy = ChannelProxy(s, rx_channel, tx_channel,
                                         transfer_channel_server_address)
                    proxy.start()
                    self.__proxies.append(proxy)

                    s = PubSubSocket(channel_server_address)
                    s.send(
                        channel, 'connect',
                        json.dumps({
                            'tx_channel':
                            rx_channel,
                            'rx_channel':
                            tx_channel,
                            'channel_server_address':
                            transfer_channel_server_address
                        }))

                else:
                    s.close()

        finally:
            print 'stopping channel proxies...'
            for p in self.__proxies:
                if p.running:
                    p.stop()

            self.__proxies = []
    def run_main_loop(self):  # TODO: check channel proxies health, if not synchronized too long, should kill it.
        assert not self.__running

        self.__running = True

        try:
            self.__socket.listen(5)
            while self.__running:
                s, addr = self.__socket.accept()
                if not self.__running:
                    break

                try:
                    ret = apiclient.connect(conf.USER_NAME, conf.PASSWORD, self.__sensor_name)
                except Exception:
                    traceback.print_exc()
                    time.sleep(3.0)
                    continue

                if ret:
                    channel_server_address, channel, transfer_channel_server_address = ret
                    rx_channel = 'rx-' + str(uuid.uuid4())
                    tx_channel = 'tx-' + str(uuid.uuid4())

                    proxy = ChannelProxy(s, rx_channel, tx_channel, transfer_channel_server_address)
                    proxy.start()
                    self.__proxies.append(proxy)

                    s = PubSubSocket(channel_server_address)
                    s.send(channel, 'connect',
                           json.dumps({'tx_channel': rx_channel,
                                       'rx_channel': tx_channel,
                                       'channel_server_address': transfer_channel_server_address}))

                else:
                    s.close()

        finally:
            print 'stopping channel proxies...'
            for p in self.__proxies:
                if p.running:
                    p.stop()

            self.__proxies = []
        def channel_message_received(command, payload):
            if command == 'connect':
                message = json.loads(payload)
                tx_channel = message['tx_channel']
                rx_channel = message['rx_channel']
                new_channel_server_address = message['channel_server_address']

                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
                s.connect(self.__server_address)

                proxy = ChannelProxy(s, rx_channel, tx_channel, new_channel_server_address)
                proxy.start()

                with self.__lock:
                    self.__channel_proxies.append(proxy)

            elif command == 'quit':
                return False

            return self.__running
        def channel_message_received(command, payload):
            if command == 'connect':
                message = json.loads(payload)
                tx_channel = message['tx_channel']
                rx_channel = message['rx_channel']
                new_channel_server_address = message['channel_server_address']

                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
                s.connect(self.__server_address)

                proxy = ChannelProxy(s, rx_channel, tx_channel,
                                     new_channel_server_address)
                proxy.start()

                with self.__lock:
                    self.__channel_proxies.append(proxy)

            elif command == 'quit':
                return False

            return self.__running