Destiny\DestinyClient::request PHP Method

request() public method

public request ( DestinyRequest[] | DestinyRequest $requests ) : array
$requests DestinyRequest[] | DestinyRequest
return array
    public function request($requests)
    {
        $multi = true;
        if ($requests instanceof DestinyRequest) {
            $multi = false;
            $requests = [$requests];
        }
        $batch = $responses = [];
        foreach ($requests as $key => $request) {
            if (!$request instanceof DestinyRequest) {
                throw new Exception('Invalid request');
            }
            if (!CACHE_ENABLED || $request->raw) {
                Cache::forget($request->key);
            }
            if ($request->cache && Cache::has($request->key)) {
                Debugbar::startMeasure("CACHE: " . $request->url);
                $responses[$key] = Cache::get($request->key);
                Debugbar::stopMeasure("CACHE: " . $request->url);
            } else {
                $req = $this->createRequest('GET', $request->url);
                $req->getEmitter()->attach($request);
                $batch[$key] = $req;
            }
        }
        if (count($batch)) {
            $keys = array_keys($batch);
            foreach (Pool::batch($this, $batch) as $i => $result) {
                $key = $keys[$i];
                $request = $requests[$key];
                if ($request instanceof DestinyRequest && $request->raw) {
                    $responses[$key] = $result;
                    continue;
                }
                if ($result instanceof Exception) {
                    if ($request->salvageable) {
                        $responses[$key] = null;
                    } else {
                        Cache::forget($request->key);
                        throw new DestinyException($result->getMessage(), $result->getCode(), $result);
                    }
                }
                if ($result instanceof Response) {
                    $response = json_decode($result->getBody()->getContents(), true);
                    if (array_get($response, 'ErrorStatus') !== 'Success') {
                        Cache::forget($request->key);
                        Bugsnag::setMetaData(['bungie' => $response]);
                        if (array_get($response, 'ErrorCode') === $this->destinyLegacyPlatformErrorCode) {
                            throw new \DestinyLegacyPlatformException(array_get($response, 'Message'), array_get($response, 'ErrorCode'));
                        } else {
                            if (array_get($response, 'ErrorCode') === $this->destinyPrivacyRestriction) {
                                $response = ['private' => true];
                            } else {
                                if ($request->salvageable) {
                                    $response = null;
                                } else {
                                    throw new DestinyException(array_get($response, 'Message'), array_get($response, 'ErrorCode'));
                                }
                            }
                        }
                    } else {
                        $response = array_get($response, 'Response');
                    }
                    if (empty($response)) {
                        Cache::forget($request->key);
                    }
                    if ($request->cache) {
                        Cache::put($request->key, $response, $request->cache);
                    }
                    $responses[$key] = $response;
                }
            }
        }
        return $multi ? $responses : array_shift($responses);
    }