Use external objects queue if environment var BITMESSAGE_HYBRID is set
This commit is contained in:
parent
ffa12acad5
commit
ea8b7cfe46
|
@ -218,6 +218,13 @@ class Main(object):
|
||||||
|
|
||||||
self.setSignalHandler()
|
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")
|
set_thread_name("PyBitmessage")
|
||||||
|
|
||||||
state.dandelion = config.safeGetInt('network', 'dandelion')
|
state.dandelion = config.safeGetInt('network', 'dandelion')
|
||||||
|
|
46
src/tests/queue.py
Normal file
46
src/tests/queue.py
Normal 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
|
Reference in New Issue
Block a user