'Writes a request message and reads a response or error message.'

def request(self, message_name, request_datum):

    buffer_writer = StringIO()
    buffer_encoder = io.BinaryEncoder(buffer_writer)
    self.write_handshake_request(buffer_encoder)
    self.write_call_request(message_name, request_datum, buffer_encoder)
    call_request = buffer_writer.getvalue()
    return self.issue_request(call_request, message_name, request_datum)
