Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
 
3
namespace React\Socket;
4
 
5
use React\Dns\Resolver\ResolverInterface;
6
use React\EventLoop\LoopInterface;
7
use React\Promise;
8
 
9
final class HappyEyeBallsConnector implements ConnectorInterface
10
{
11
    private $loop;
12
    private $connector;
13
    private $resolver;
14
 
15
    public function __construct(LoopInterface $loop, ConnectorInterface $connector, ResolverInterface $resolver)
16
    {
17
        $this->loop = $loop;
18
        $this->connector = $connector;
19
        $this->resolver = $resolver;
20
    }
21
 
22
    public function connect($uri)
23
    {
24
 
25
        if (\strpos($uri, '://') === false) {
26
            $parts = \parse_url('tcp://' . $uri);
27
            unset($parts['scheme']);
28
        } else {
29
            $parts = \parse_url($uri);
30
        }
31
 
32
        if (!$parts || !isset($parts['host'])) {
33
            return Promise\reject(new \InvalidArgumentException('Given URI "' . $uri . '" is invalid'));
34
        }
35
 
36
        $host = \trim($parts['host'], '[]');
37
 
38
        // skip DNS lookup / URI manipulation if this URI already contains an IP
39
        if (false !== \filter_var($host, \FILTER_VALIDATE_IP)) {
40
            return $this->connector->connect($uri);
41
        }
42
 
43
        $builder = new HappyEyeBallsConnectionBuilder(
44
            $this->loop,
45
            $this->connector,
46
            $this->resolver,
47
            $uri,
48
            $host,
49
            $parts
50
        );
51
        return $builder->connect();
52
    }
53
}