def _register(self): self._stream.wait_for_ready() request = consensus_pb2.ConsensusRegisterRequest( name=self._engine.name(), version=self._engine.version(), ).SerializeToString() while True: future = self._stream.send( message_type=Message.CONSENSUS_REGISTER_REQUEST, content=request) response = consensus_pb2.ConsensusRegisterResponse() response.ParseFromString(future.result(REGISTER_TIMEOUT).content) if (response.status == consensus_pb2.ConsensusRegisterResponse.NOT_READY): continue if response.status == consensus_pb2.ConsensusRegisterResponse.OK: return StartupState(response.chain_head, response.peers, response.local_peer_info) raise exceptions.ReceiveError( 'Registration failed with status {}'.format(response.status))
def _register(self): self._stream.wait_for_ready() request = consensus_pb2.ConsensusRegisterRequest( name=self._engine.name(), version=self._engine.version(), ) for (name, version) in self._engine.additional_protocols(): protocol = request.additional_protocols.add() protocol.name = name protocol.version = version while True: future = self._stream.send( message_type=Message.CONSENSUS_REGISTER_REQUEST, content=request.SerializeToString()) response = consensus_pb2.ConsensusRegisterResponse() response.ParseFromString(future.result(REGISTER_TIMEOUT).content) if (response.status == consensus_pb2.ConsensusRegisterResponse.NOT_READY): continue if response.status == consensus_pb2.ConsensusRegisterResponse.OK: if (response.HasField('chain_head') and response.HasField('local_peer_info')): return StartupState(response.chain_head, response.peers, response.local_peer_info) return None raise exceptions.ReceiveError( 'Registration failed with status {}'.format(response.status))
def _wait_until_active(self): future = self._stream.receive() while True: try: message = future.result(1) except concurrent.futures.TimeoutError: continue if (message.message_type == Message.CONSENSUS_NOTIFY_ENGINE_ACTIVATED): notification = \ consensus_pb2.ConsensusNotifyEngineActivated() notification.ParseFromString(message.content) startup_state = StartupState(notification.chain_head, notification.peers, notification.local_peer_info) LOGGER.info( 'Received activation message with startup state: %s', startup_state) self._stream.send_back( message_type=Message.CONSENSUS_NOTIFY_ACK, correlation_id=message.correlation_id, content=consensus_pb2.ConsensusNotifyAck( ).SerializeToString()) return startup_state LOGGER.warning( 'Received message type %s while waiting for \ activation message', message.message_type) future = self._stream.receive()
def _wait_until_active(self): while True: try: future = self._stream.receive() message = future.result(1) except concurrent.futures.TimeoutError: continue if (message.message_type == Message.CONSENSUS_NOTIFY_ENGINE_ACTIVATED): notification = \ consensus_pb2.ConsensusNotifyEngineActivated() notification.ParseFromString(message.content) self._stream.send_back( message_type=Message.CONSENSUS_NOTIFY_ACK, correlation_id=message.correlation_id, content=consensus_pb2.ConsensusNotifyAck( ).SerializeToString()) return StartupState(notification.chain_head, notification.peers, notification.local_peer_info)