code: public synchronized <T extends Response> long request(Request<T> request, RpcCallback<T> callback, long timeout) {
          if (request == null) {
              throw new RuntimeException("Request can't be null");
          }
          long rid = NEXT_RPC_ID.incrementAndGet();
          this.apiBroker.send(new ApiBroker.PerformRequest(rid, request, callback, timeout));
          return rid;
      }
docs: Performing API request
  
  @param request  request body
  @param callback request callback
  @param <T>      type of response
  @param timeout   timeout of rpc
  @return rid of request