serializer = $serializer; $clientConfig['serializer'] = $serializer; // Adds some defaults // gccl needs to be present for handwritten clients $clientConfig += ['libName' => 'gccl', 'emulatorHost' => null]; if ((bool) $clientConfig['emulatorHost']) { $emulatorConfig = $this->emulatorGapicConfig($clientConfig['emulatorHost']); $clientConfig = \array_merge($clientConfig, $emulatorConfig); } //@codeCoverageIgnoreEnd // Initialize the client classes and store them in memory $this->clients = []; foreach ($clientClasses as $className) { $this->clients[$className] = new $className($clientConfig); } } /** * Helper function that forwards the request to a client obj. * * @param string $clientClass The request will be forwarded to this client class. * @param string $method This method needs to be called on the client obj. * @param Message $request The protobuf Request instance to pass as the first argument to the $method. * @param array $optionalArgs The optional args. * @param bool $whitelisted This decides the behaviour when a NotFoundException is encountered. * * @return \Generator|OperationResponse|array|null * * @throws ServiceException */ public function sendRequest(string $clientClass, string $method, Message $request, array $optionalArgs, bool $whitelisted = \false) { $clientObj = $this->getClientObject($clientClass); if (!$clientObj) { return null; } $allArgs = [$request]; $allArgs[] = $optionalArgs; try { $callable = [$clientObj, $method]; $response = \call_user_func_array($callable, $allArgs); return $this->handleResponse($response); } catch (ApiException $ex) { throw $this->convertToGoogleException($ex); } catch (NotFoundException $e) { if ($whitelisted) { throw $this->modifyWhitelistedError($e); } throw $e; } } /** * Helper function that returns a client object stored in memory * using the client class as key. * @param $clientClass The client class whose object we need. * @return mixed */ private function getClientObject(string $clientClass) { return $this->clients[$clientClass] ?? null; } }