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()