public function createClient($address = null) { $parts = $this->parseUrl($address); $secure = isset($parts['schema']) && $parts['schema'] !== 'tcp'; $connector = $secure ? $this->secureConnector : $this->connector; $promise = $connector->create($parts['host'], $parts['port'])->then(function (Stream $stream) { return new Client($stream); }); if (isset($parts['user'])) { $promise = $promise->then(function (Client $client) use($parts, $secure) { $sender = new ActionSender($client); return $sender->login($parts['user'], $parts['pass'])->then(function ($response) use($client) { return $client; }, function ($error) use($client) { $client->close(); throw $error; }); }); } return $promise; }
/** * Create client. * * @param array $options * * @return \React\Promise\Promise */ public function create(array $options = []) { foreach (['host', 'port', 'username', 'secret'] as $key) { $options[$key] = Arr::get($options, $key, null); } $promise = $this->connector->create($options['host'], $options['port'])->then(function (Stream $stream) { return new Client($stream, new Parser()); }); if (!is_null($options['username'])) { $promise = $promise->then(function (Client $client) use($options) { $sender = new ActionSender($client); return $sender->login($options['username'], $options['secret'])->then(function () use($client) { return $client; }, function ($error) use($client) { $client->close(); throw $error; }); }, function ($error) { throw $error; }); } return $promise; }