def cancel(self, json_payload, newpacket, info):
     from twisted.internet.defer import Deferred
     from logs import lg
     from p2p import p2p_service
     from stream import message_peddler
     try:
         action = json_payload['action']
         queue_id = json_payload.get('queue_id', None)
         consumer_id = json_payload['consumer_id']
         producer_id = json_payload['producer_id']
         group_key = json_payload['group_key']
     except:
         lg.warn("wrong payload: %r" % json_payload)
         return p2p_service.SendFail(newpacket, 'wrong payload')
     # TODO: validate signature and the key
     result = Deferred()
     if action == 'queue-disconnect':
         message_peddler.A(
             event='disconnect',
             queue_id=queue_id,
             consumer_id=consumer_id,
             producer_id=producer_id,
             group_key=group_key,
             request_packet=newpacket,
             result_defer=result,
         )
     else:
         lg.warn("wrong action request" % newpacket.Payload)
         return p2p_service.SendFail(newpacket, 'wrong action request')
     return result
 def start(self):
     from main import events
     from stream import message_peddler
     message_peddler.A('start')
     self._do_connect_message_brokers_dht_layer()
     events.add_subscriber(self._on_dht_layer_connected,
                           'dht-layer-connected')
     events.add_subscriber(self._on_my_identity_url_changed,
                           'my-identity-url-changed')
     return True
 def stop(self):
     from dht import dht_service
     from dht import dht_records
     from main import events
     from stream import message_peddler
     events.remove_subscriber(self._on_my_identity_url_changed,
                              'my-identity-url-changed')
     events.remove_subscriber(self._on_dht_layer_connected,
                              'dht-layer-connected')
     dht_service.suspend(layer_id=dht_records.LAYER_MESSAGE_BROKERS)
     message_peddler.A('stop')
     return True
 def request(self, json_payload, newpacket, info):
     from twisted.internet.defer import Deferred
     from logs import lg
     from p2p import p2p_service
     from stream import message_peddler
     try:
         action = json_payload['action']
         queue_id = json_payload['queue_id']
         consumer_id = json_payload['consumer_id']
         producer_id = json_payload['producer_id']
         group_key = json_payload['group_key']
         last_sequence_id = json_payload.get('last_sequence_id', -1)
         position = json_payload.get('position', -1)
         archive_folder_path = json_payload.get('archive_folder_path', None)
     except:
         lg.warn("wrong payload: %r" % json_payload)
         return p2p_service.SendFail(newpacket, 'wrong payload')
     # TODO: validate signature and the key
     result = Deferred()
     if action == 'queue-connect':
         message_peddler.A(
             'queue-connect',
             group_key=group_key,
             queue_id=queue_id,
             consumer_id=consumer_id,
             producer_id=producer_id,
             position=position,
             last_sequence_id=last_sequence_id,
             archive_folder_path=archive_folder_path,
             request_packet=newpacket,
             result_defer=result,
         )
     else:
         lg.warn("wrong action request" % newpacket.Payload)
         return p2p_service.SendFail(newpacket, 'wrong action request')
     return result
 def request(self, json_payload, newpacket, info):
     from twisted.internet.defer import Deferred
     from logs import lg
     from p2p import p2p_service
     from stream import message_peddler
     from userid import id_url
     result = Deferred()
     try:
         action = json_payload['action']
     except:
         lg.exc()
         return p2p_service.SendFail(newpacket, 'invalid payload')
     # TODO: validate signature and the key
     if action == 'queue-connect' or action == 'queue-connect-follow':
         try:
             queue_id = json_payload.get('queue_id')
             consumer_id = json_payload.get('consumer_id')
             producer_id = json_payload.get('producer_id')
             group_key = json_payload.get('group_key')
             position = int(json_payload.get('position', -1))
             archive_folder_path = json_payload.get('archive_folder_path',
                                                    None)
             last_sequence_id = json_payload.get('last_sequence_id', -1)
             known_brokers = json_payload.get('known_brokers', {}) or {}
             known_brokers = {
                 int(k): id_url.field(v)
                 for k, v in known_brokers.items()
             }
         except:
             lg.warn("wrong payload: %r" % json_payload)
             return p2p_service.SendFail(newpacket, 'wrong payload')
         message_peddler.A(
             event='connect' if action == 'queue-connect' else 'follow',
             queue_id=queue_id,
             consumer_id=consumer_id,
             producer_id=producer_id,
             group_key=group_key,
             position=position,
             archive_folder_path=archive_folder_path,
             last_sequence_id=last_sequence_id,
             known_brokers=known_brokers,
             request_packet=newpacket,
             result_defer=result,
         )
     elif action == 'broker-verify':
         try:
             customer_id = json_payload['customer_id']
             broker_id = json_payload['broker_id']
             position = json_payload['position']
             known_streams = json_payload['streams']
             known_brokers = {
                 int(k): id_url.field(v)
                 for k, v in json_payload['known_brokers'].items()
             }
         except:
             lg.warn("wrong payload: %r" % json_payload)
             return p2p_service.SendFail(newpacket, 'wrong payload')
         message_peddler.A(
             event='broker-reconnect',
             customer_id=customer_id,
             broker_id=broker_id,
             position=position,
             known_streams=known_streams,
             known_brokers=known_brokers,
             request_packet=newpacket,
             result_defer=result,
         )
     else:
         lg.warn("wrong action request" % newpacket.Payload)
         return p2p_service.SendFail(newpacket, 'wrong action request')
     return result
 def _on_my_identity_url_changed(self, evt):
     from stream import message_peddler
     message_peddler.A('stop')
     message_peddler.close_all_streams()
     message_peddler.check_rotate_queues()