private CompletableFuture createRequest()

in facebook-gamingservices/src/main/java/com/facebook/gamingservices/cloudgaming/DaemonRequest.java [82:140]


  private CompletableFuture<GraphResponse> createRequest() {
    CompletableFuture<GraphResponse> response =
        CompletableFuture.supplyAsync(
            new Supplier<GraphResponse>() {
              @Override
              public GraphResponse get() {
                String uniqueID = UUID.randomUUID().toString();
                try {
                  mParameters.put(SDKConstants.REQUEST_ID, uniqueID);

                  Intent intent = new Intent();
                  // allow initialization (auto-login) request to be a publicly broadcasted
                  String functionType = mParameters.getString(SDKConstants.PARAM_TYPE);
                  mLogger.logPreparingRequest(functionType, uniqueID, mParameters);
                  if (!functionType.equals(SDKMessageEnum.GET_ACCESS_TOKEN.toString())
                      && !functionType.equals(SDKMessageEnum.IS_ENV_READY.toString())) {
                    SharedPreferences sharedPreferences =
                        mContext.getSharedPreferences(
                            SDKConstants.PREF_DAEMON_PACKAGE_NAME, Activity.MODE_PRIVATE);
                    String daemonPackageName =
                        sharedPreferences.getString(SDKConstants.PARAM_DAEMON_PACKAGE_NAME, null);
                    // does not exist
                    if (daemonPackageName == null) {
                      FacebookRequestError error =
                          new FacebookRequestError(
                              FacebookRequestError.INVALID_ERROR_CODE,
                              "DAEMON_REQUEST_EXECUTE_ASYNC_FAILED",
                              "Unable to correctly create the request with a secure connection");
                      return DaemonReceiver.createErrorResponse(error, uniqueID);
                    } else {
                      intent.setPackage(daemonPackageName);
                    }
                  }
                  intent.setAction(SDKConstants.REQUEST_ACTION);
                  Iterator iter = mParameters.keys();
                  while (iter.hasNext()) {
                    String key = (String) iter.next();
                    String value = mParameters.getString(key);
                    intent.putExtra(key, value);
                  }

                  CompletableFuture<GraphResponse> future = new CompletableFuture<GraphResponse>();
                  mRequestStore.put(uniqueID, future);
                  mContext.sendBroadcast(intent);
                  mLogger.logSentRequest(functionType, uniqueID, mParameters);

                  return future.get();
                } catch (JSONException | InterruptedException | ExecutionException e) {
                  FacebookRequestError error =
                      new FacebookRequestError(
                          FacebookRequestError.INVALID_ERROR_CODE,
                          "DAEMON_REQUEST_EXECUTE_ASYNC_FAILED",
                          "Unable to correctly create the request or obtain response");
                  return DaemonReceiver.createErrorResponse(error, uniqueID);
                }
              }
            });
    return response;
  }