def run(config, bcast, discovery_addr):
f = MyFactory(config)
try:
port = reactor.listenTCP(config.port, f)
config.port = port.getHost().port
except error.CannotListenError:
logging.error("cannot listen on {}".format(config.port))
sys.exit(1)
# connect to discovery server
point = TCP4ClientEndpoint(reactor, discovery_addr, 8123, timeout=90)
d = connectProtocol(point, Discovery({}, f))
d.addCallback(got_discovery, b64encode(f.vk), config.port).addErrback(my_err_back)
# connect to myself
point = TCP4ClientEndpoint(reactor, "localhost", config.port, timeout=90)
d = connectProtocol(point, MyProto(f))
d.addCallback(got_protocol).addErrback(my_err_back)
if bcast:
call_later(5, f.overwrite_promoters)
# optionally run tests, args.test == None implies reactive node
# we use call later to wait until the nodes are registered
if config.test == 'dummy':
call_later(5, f.bcast, pb.Dummy(m='z'))
elif config.test == 'bracha':
call_later(6, f.bracha.bcast_init)
elif config.test == 'mo14':
call_later(6, f.mo14.start, config.value)
elif config.test == 'acs':
# use port number (unique on local network) as test message
call_later(6, f.acs.start, str(config.port), 1)
elif config.test == 'tc':
call_later(5, f.tc_runner.make_tx, 1.0 / config.tx_rate, True)
# optionally use validate
if config.validate:
call_later(10, f.tc_runner.make_validation)
elif config.test == 'bootstrap':
call_later(5, f.tc_runner.bootstrap_promoters)
logging.info("NODE: reactor starting on port {}".format(config.port))
reactor.run()
评论列表
文章目录