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