Use external objects queue if environment var BITMESSAGE_HYBRID is set

This commit is contained in:
Dmitri Bogomolov 2021-08-01 16:58:52 +03:00
parent ffa12acad5
commit ea8b7cfe46
Signed by untrusted user: g1itch
GPG Key ID: 720A756F18DEED13
2 changed files with 53 additions and 0 deletions

View File

@ -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')

46
src/tests/queue.py Normal file
View File

@ -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