| 509 | self.stop() |
| 510 | |
| 511 | class Member(object): |
| 512 | |
| 513 | def __init__(self, state_machine, network, peers, seed=None, |
| 514 | seed_cls=Seed, bootstrap_cls=Bootstrap): |
| 515 | self.network = network |
| 516 | self.node = network.new_node() |
| 517 | if seed is not None: |
| 518 | self.startup_role = seed_cls(self.node, initial_state=seed, peers=peers, |
| 519 | execute_fn=state_machine) |
| 520 | else: |
| 521 | self.startup_role = bootstrap_cls(self.node, execute_fn=state_machine, peers=peers) |
| 522 | self.requester = None |
| 523 | |
| 524 | def start(self): |
| 525 | self.startup_role.start() |
| 526 | self.thread = threading.Thread(target=self.network.run) |
| 527 | self.thread.start() |
| 528 | |
| 529 | def invoke(self, input_value, request_cls=Requester): |
| 530 | assert self.requester is None |
| 531 | q = Queue.Queue() |
| 532 | self.requester = request_cls(self.node, input_value, q.put) |
| 533 | self.requester.start() |
| 534 | output = q.get() |
| 535 | self.requester = None |
| 536 | return output |
no outgoing calls