def send(self, message_type, data, callback=None, one_way=False):
        """Sends a message of message_type

        Args:
            message_type (validator_pb2.Message): enum value
            data (bytes): serialized protobuf
            callback (function): a callback function to call when a
                response to this message is received

        Returns:
            future.Future
        """
        message = validator_pb2.Message(
            correlation_id=_generate_id(),
            content=data,
            message_type=message_type)

        fut = future.Future(message.correlation_id, message.content,
                            callback, timeout=self._connection_timeout)
        if not one_way:
            self._futures.put(fut)

        self._send_receive_thread.send_message(message)
        return fut