code: def _make_request(self, method, *args):
          
          response, request_id = self._connection.json_rpc(self._prefix + method, *args)
  
          if 'id' not in response:
              raise ProtocolException('JSON-RPC response does not contain ID field.')
  
          if response['id'] != request_id:
              raise ProtocolException(
                  'ID of JSON-RPC request ({}) did not match response ({}).'.format(
                      request_id, response['id']))
  
          if 'result' in response:
              return response['result']
  
          if 'error' in response:
              if 'data' in response['error']:
                  exception_type = response['error']['data']['type']
                  exception_message = response['error']['data']['message']
  
                  if not hasattr(exceptions, exception_type):
                      raise RemoteException(exception_type, exception_message)
                  else:
                      exception = getattr(exceptions, exception_type)
                      raise exception(exception_message)
              else:
                  raise ProtocolException(response['error']['message'])
docs: This method performs a JSON-RPC request via the object's ZMQ socket. If successful,
          the result is returned, otherwise exceptions are raised. Server side exceptions are
          raised using the same type as on the server if they are part of the exceptions-module.
          Otherwise, a RemoteException is raised.
  
          :param method: Method of the object to call on the remote.
          :param args: Positional arguments to the method call.
          :return: Result of the remote call if successful.