Addr::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
cc 2
eloc 2
nc 2
nop 1
dl 0
loc 4
ccs 0
cts 0
cp 0
crap 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Bitcoin\Networking\Messages;
6
7
use BitWasp\Bitcoin\Networking\Message;
8
use BitWasp\Bitcoin\Networking\NetworkSerializable;
9
use BitWasp\Bitcoin\Networking\Serializer\Message\AddrSerializer;
10
use BitWasp\Bitcoin\Networking\Serializer\Structure\NetworkAddressTimestampSerializer;
11
use BitWasp\Bitcoin\Networking\Structure\NetworkAddressTimestamp;
12
use BitWasp\Buffertools\BufferInterface;
13
14
class Addr extends NetworkSerializable implements \Countable
15
{
16
    /**
17
     * Address of other nodes on the network. As it types the
18
     * NetworkAddressTimestamp type, it is incompatible with
19
     * nodes with a version <31402
20
     * @var NetworkAddressTimestamp[]
21 14
     */
22
    private $addresses = [];
23 14
24 8
    /**
25 9
     * @param NetworkAddressTimestamp[] $addresses
26 14
     */
27
    public function __construct(array $addresses = [])
28
    {
29
        foreach ($addresses as $addr) {
30
            $this->addAddress($addr);
31 6
        }
32
    }
33 6
34
    /**
35
     * @param NetworkAddressTimestamp $address
36
     * @return $this
37
     */
38
    private function addAddress(NetworkAddressTimestamp $address)
39 3
    {
40
        $this->addresses[] = $address;
41 3
        return $this;
42
    }
43
44
    /**
45
     * @see https://en.bitcoin.it/wiki/Protocol_documentation#addr
46
     * @return string
47 9
     */
48
    public function getNetworkCommand(): string
49 9
    {
50
        return Message::ADDR;
51
    }
52
53
    /**
54
     * @return int
55
     */
56
    public function count(): int
57 6
    {
58
        return count($this->addresses);
59 6
    }
60 3
61
    /**
62
     * @return NetworkAddressTimestamp[]
63 3
     */
64
    public function getAddresses(): array
65
    {
66
        return $this->addresses;
67
    }
68
69
    /**
70 11
     * @param int $index
71
     * @return NetworkAddressTimestamp
72 11
     * @throws \InvalidArgumentException
73 11
     */
74
    public function getAddress(int $index): NetworkAddressTimestamp
75
    {
76
        if (false === isset($this->addresses[$index])) {
77
            throw new \InvalidArgumentException('No address exists at this index');
78
        }
79 3
80
        return $this->addresses[$index];
81 3
    }
82
83
    /**
84
     * @see \BitWasp\Bitcoin\SerializableInterface::getBuffer()
85
     */
86
    public function getBuffer(): BufferInterface
87
    {
88
        return (new AddrSerializer(new NetworkAddressTimestampSerializer()))->serialize($this);
89
    }
90
}
91