Passed
Push — master ( 3dc4f8...535c32 )
by thomas
15:05
created

NetworkSettings::withDnsServer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 5
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Networking\Settings;
6
7
use BitWasp\Bitcoin\Networking\DnsSeeds\DnsSeedList;
8
9
abstract class NetworkSettings implements NetworkSettingsInterface, MutableNetworkSettingsInterface
10
{
11
    /**
12
     * @var int
13
     */
14
    protected $defaultP2PPort = 8333;
15
16
    /**
17
     * @var int
18
     */
19
    protected $connectionTimeout = 10;
20
21
    /**
22
     * @var string
23
     */
24
    protected $dnsServer = '8.8.8.8';
25
26
    /**
27
     * @var DnsSeedList
28
     */
29
    protected $dnsSeeds = null;
30
31
    /**
32
     * @var int
33
     */
34
    protected $maxRetries = 5;
35
36
    /**
37
     * @return DnsSeedList
38
     */
39
    public function getDnsSeedList(): DnsSeedList
40
    {
41
        if (null === $this->dnsServer) {
42
            throw new \RuntimeException("Missing dns seeds");
43
        }
44
        return $this->dnsSeeds;
45
    }
46
47
    /**
48
     * @return string
49
     */
50
    public function getDnsServer(): string
51
    {
52
        return $this->dnsServer;
53
    }
54
55
    /**
56
     * @return int
57
     */
58
    public function getDefaultP2PPort(): int
59
    {
60
        return $this->defaultP2PPort;
61
    }
62
63
    /**
64
     * @return int
65
     */
66
    public function getConnectionTimeout(): int
67
    {
68
        return $this->connectionTimeout;
69
    }
70
71
    /**
72
     * @return int
73
     */
74
    public function getMaxConnectRetries(): int
75
    {
76
        return $this->maxRetries;
77
    }
78
79
    /**
80
     * @return array
81
     */
82
    public function getSocketParams(): array
83
    {
84
        return [
85
            'timeout' => $this->getConnectionTimeout(),
86
        ];
87
    }
88
89
    /**
90
     * @param string $server
91
     * @return $this
92
     */
93
    public function withDnsServer($server): NetworkSettings
94
    {
95
        $clone = clone $this;
96
        $clone->dnsServer = $server;
97
        return $this;
98
    }
99
100
    /**
101
     * @param DnsSeedList $list
102
     * @return $this
103
     */
104
    public function withDnsSeeds(DnsSeedList $list): NetworkSettings
105
    {
106
        $clone = clone $this;
107
        $clone->dnsSeeds = $list;
108
        return $this;
109
    }
110
111
    /**
112
     * @param int $p2pPort
113
     * @return $this
114
     */
115
    public function withDefaultP2PPort(int $p2pPort): NetworkSettings
116
    {
117
        $clone = clone $this;
118
        $clone->defaultP2PPort = $p2pPort;
119
        return $this;
120
    }
121
122
    /**
123
     * @param int $timeout
124
     * @return $this
125
     */
126
    public function withConnectionTimeout(int $timeout): NetworkSettings
127
    {
128
        $clone = clone $this;
129
        $clone->connectionTimeout = $timeout;
130
        return $this;
131
    }
132
133
    /**
134
     * @param int $maxRetries
135
     * @return $this
136
     */
137
    public function withMaxConnectRetries(int $maxRetries): NetworkSettings
138
    {
139
        $clone = clone $this;
140
        $clone->maxRetries = $maxRetries;
141
        return $this;
142
    }
143
}
144