예제 #1
0
 /**
  * @return Client
  */
 public function build()
 {
     $this->buildLoggers();
     if (is_null($this->handler)) {
         $this->handler = ClientBuilder::defaultHandler();
     }
     $sslOptions = null;
     if (isset($this->sslKey)) {
         $sslOptions['ssl_key'] = $this->sslKey;
     }
     if (isset($this->sslCert)) {
         $sslOptions['cert'] = $this->sslCert;
     }
     if (isset($this->sslVerification)) {
         $sslOptions['verify'] = $this->sslVerification;
     }
     if (!is_null($sslOptions)) {
         $sslHandler = function (callable $handler, array $sslOptions) {
             return function (array $request) use($handler, $sslOptions) {
                 // Add our custom headers
                 foreach ($sslOptions as $key => $value) {
                     $request['client'][$key] = $value;
                 }
                 // Send the request using the handler and return the response.
                 return $handler($request);
             };
         };
         $this->handler = $sslHandler($this->handler, $sslOptions);
     }
     if (is_null($this->serializer)) {
         $this->serializer = new SmartSerializer();
     } elseif (is_string($this->serializer)) {
         $this->serializer = new $this->serializer();
     }
     if (is_null($this->connectionFactory)) {
         $connectionParams = [];
         $this->connectionFactory = new ConnectionFactory($this->handler, $connectionParams, $this->serializer, $this->logger, $this->tracer);
     }
     if (is_null($this->hosts)) {
         $this->hosts = $this->getDefaultHost();
     }
     if (is_null($this->selector)) {
         $this->selector = new Selectors\RoundRobinSelector();
     } elseif (is_string($this->selector)) {
         $this->selector = new $this->selector();
     }
     $this->buildTransport();
     if (is_null($this->endpoint)) {
         $transport = $this->transport;
         $serializer = $this->serializer;
         $this->endpoint = function ($class) use($transport, $serializer) {
             $fullPath = '\\Elasticsearch\\Endpoints\\' . $class;
             if ($class === 'Bulk' || $class === 'Msearch' || $class === 'MPercolate') {
                 return new $fullPath($transport, $serializer);
             } else {
                 return new $fullPath($transport);
             }
         };
     }
     return new Client($this->transport, $this->endpoint);
 }