def send_back(self, message_type, correlation_id, content): """ Return a response to a message. :param message_type: validator_pb2.Message.MessageType enum value :param correlation_id: a random str internal to the validator :param content: protobuf bytes :raises (ValidatorConnectionError): """ if not self._event.is_set(): raise ValidatorConnectionError() message = validator_pb2.Message(message_type=message_type, correlation_id=correlation_id, content=content) self._send_recieve_thread.put_message(message)
def send(self, message_type, content): """Send a message to the validator :param: message_type(validator_pb2.Message.MessageType) :param: content(bytes) :return: (future.Future) :raises: (ValidatorConnectionError) """ if not self._event.is_set(): raise ValidatorConnectionError() message = validator_pb2.Message(message_type=message_type, correlation_id=_generate_id(), content=content) future = Future(message.correlation_id) self._futures.put(future) self._send_recieve_thread.put_message(message) return future
def _receive_message(self): """ internal coroutine that receives messages and puts them on the recv_queue """ while True: if not self._ready_event.is_set(): break msg_bytes = yield from self._sock.recv() message = validator_pb2.Message() message.ParseFromString(msg_bytes) try: self._futures.set_result( message.correlation_id, FutureResult(message_type=message.message_type, content=message.content)) self._futures.remove(message.correlation_id) except FutureCollectionKeyError: # if we are getting an initial message, not a response if not self._ready_event.is_set(): break self._recv_queue.put_nowait(message)