def __init__(self, nid, is_relay=False, on_node_down=lambda ref, nid: ref << ('_node_down', nid), on_receive=lambda sender_nid, msg_h: print( "deliver", msg_h, "from", sender_nid), heartbeat_interval=1.0, heartbeat_max_silence=3.0): self.nid = nid self.is_relay = is_relay self._on_node_down = on_node_down self._on_receive = on_receive self._lock = RLock() self._logic = HubLogic(nid, is_relay=is_relay, heartbeat_interval=heartbeat_interval, heartbeat_max_silence=heartbeat_max_silence) self._ctx = zmq.Context() self._ctx.linger = 0 self._insock = self._ctx.socket(zmq.ROUTER) self._outsock = self._ctx.socket(zmq.ROUTER) self._insock.identity = self._outsock.identity = nid self._listener_in = spawn(self._listen, self._insock, IN) self._listener_in.link_exception(lambda _: self.stop()) self._listener_out = spawn(self._listen, self._outsock, OUT) self._listener_out.link_exception(lambda _: self.stop()) self._heartbeater = None self._watched_nodes = {} self._initialized = True self._start()
self.t += by return self.t @property def current(self): return self.t def __repr__(self): return str(self.t) def random_bytes(): return 'random' + str(random.randint(0, 100000)) DEFAULT_LOGIC = lambda: HubLogic('me:123', 1.0, 3.0) RELAY_LOGIC = lambda: HubLogic('me:123', 1.0, 3.0, is_relay=True) NID = lambda addr: addr UNIQUE_NID = lambda addr: addr + '|' + uuid.uudi4().bytes[:8] def test_empty(t=Time, logic=DEFAULT_LOGIC): t, logic = t(), logic() # empty emits_(logic.heartbeat(t=t.advance(0)), [(NextBeat, 1.0)]) def test_successful_connect(t=Time, logic=DEFAULT_LOGIC, nid=NID('kaamel:123')): t, logic = t(), logic()