public static void subscribe(
      PlexClient client,
      int subscriptionPort,
      int commandId,
      String uuid,
      String deviceName,
      final PlexHttpResponseHandler responseHandler) {
    String url = String.format("http://%s:%s", client.address, client.port);
    Logger.d("Subscribing at url %s", url);
    PlexHttpService service = getService(url, true);

    Call<PlexResponse> call = service.subscribe(uuid, deviceName, subscriptionPort, commandId);
    call.enqueue(
        new Callback<PlexResponse>() {
          @Override
          public void onResponse(Response<PlexResponse> response) {
            Logger.d("Subscribe code: %d", response.code());
            if (responseHandler != null) {
              if (response.code() == 200) responseHandler.onSuccess(response.body());
              else responseHandler.onFailure(new Throwable());
            }
          }

          @Override
          public void onFailure(Throwable t) {
            Logger.d("subscribe onFailure:");
            PlexResponse response = new PlexResponse();
            response.status = "ok";
            if (responseHandler != null) responseHandler.onSuccess(response);
            t.printStackTrace();
            if (responseHandler != null) responseHandler.onFailure(t);
          }
        });
  }