From ea8b7cfe46519bc3637efb90e008a35673547898 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Sun, 1 Aug 2021 16:58:52 +0300 Subject: [PATCH] Use external objects queue if environment var BITMESSAGE_HYBRID is set --- src/bitmessagemain.py | 7 +++++++ src/tests/queue.py | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/tests/queue.py diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index a9b5218f..0c4ae141 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -218,6 +218,13 @@ class Main(object): self.setSignalHandler() + if os.getenv('BITMESSAGE_HYBRID'): # use objqueue of an external app + import queues + from tests import queue + + state.enableNetwork = False + queues.objectProcessorQueue = queue.ObjQueue() + set_thread_name("PyBitmessage") state.dandelion = config.safeGetInt('network', 'dandelion') diff --git a/src/tests/queue.py b/src/tests/queue.py new file mode 100644 index 00000000..cc5b14ea --- /dev/null +++ b/src/tests/queue.py @@ -0,0 +1,46 @@ +import logging + +import zmq + + +logger = logging.getLogger('default') + + +class ObjQueue(object): + OBJECT_TYPES = { + 0: 'getpubkey', + 1: 'pubkey', + 2: 'msg', + 3: 'broadcast', + 0x746f72: 'onionpeer', + 0x493250: 'i2p', + 0x61646472: 'addr' + } + + def __init__(self, tag=b'obj'): + context = zmq.Context() + self.socket = context.socket(zmq.SUB) + self.socket.connect('tcp://localhost:5556') + self.socket.setsockopt(zmq.SUBSCRIBE, tag) + logging.info( + 'IDENTITY: %s, LINGER: %s, HWM: %s', + self.socket.get(zmq.IDENTITY), + self.socket.linger, + self.socket.hwm) + + def get(self): + while True: + data = self.socket.recv() + tag, data = data.split(b'\x00', 1) + if tag == b'obj': + obj_type, content = data.split(b'\x00', 1) + obj_type = int(obj_type) + if obj_type not in self.OBJECT_TYPES: + logging.warning( + 'Received an object of unknown type %i!', obj_type) + continue + data = (obj_type, content) + break + else: + logging.warning('Received msg with tag %s:\n%s', tag, data) + return data