Completed
Pull Request — master (#64)
by thomas
56:33 queued 53:42
created

VersionSerializer   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 82
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 97.62%

Importance

Changes 0
Metric Value
wmc 5
c 0
b 0
f 0
lcom 1
cbo 6
dl 0
loc 82
ccs 41
cts 42
cp 0.9762
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getTemplate() 0 14 1
A parse() 0 4 1
A serialize() 0 14 1
A fromParser() 0 16 1
1
<?php
2
3
namespace BitWasp\Bitcoin\Networking\Serializer\Message;
4
5
use BitWasp\Bitcoin\Networking\Messages\Version;
6
use BitWasp\Bitcoin\Networking\Serializer\Structure\NetworkAddressSerializer;
7
use BitWasp\Buffertools\Parser;
8
use BitWasp\Buffertools\TemplateFactory;
9
10
class VersionSerializer
11
{
12
    /**
13
     * @var NetworkAddressSerializer
14
     */
15
    private $netAddr;
16
17
    /**
18
     * @param NetworkAddressSerializer $netAddr
19
     */
20 84
    public function __construct(NetworkAddressSerializer $netAddr)
21
    {
22 84
        $this->netAddr = $netAddr;
23 84
    }
24
25
    /**
26
     * @return \BitWasp\Buffertools\Template
27
     */
28 9
    private function getTemplate()
29
    {
30 9
        return (new TemplateFactory())
31 9
            ->uint32le()      // version
32 9
            ->uint64le()   // services
33 9
            ->uint64le()      // timestamp
34 9
            ->bytestring(26)  // addrRecv
35 9
            ->bytestring(26)  // addrFrom
36 9
            ->uint64le()      // nonce
37 9
            ->varstring()     // user agent
38 9
            ->uint32le()      // start height
39 9
            ->uint8le()       // relay
40 9
            ->getTemplate();
41
    }
42
43
    /**
44
     * @param Parser $parser
45
     * @return Version
46
     */
47 2
    public function fromParser(Parser & $parser)
48
    {
49 2
        list ($version, $services, $timestamp, $addrRecv, $addrFrom, $nonce, $userAgent, $startHeight, $relay) = $this->getTemplate()->parse($parser);
50
51 2
        return new Version(
52 2
            $version,
53 2
            $services,
54 2
            $timestamp,
55 2
            $this->netAddr->parse($addrRecv),
56 2
            $this->netAddr->parse($addrFrom),
57 2
            $nonce,
58 2
            $userAgent,
59 2
            $startHeight,
60
            (bool)$relay
61 2
        );
62
    }
63
64
    /**
65
     * @param $string
66
     * @return Version
67
     */
68 2
    public function parse($string)
69
    {
70 2
        return $this->fromParser(new Parser($string));
71
    }
72
73
    /**
74
     * @param Version $version
75
     * @return \BitWasp\Buffertools\Buffer
76
     */
77 9
    public function serialize(Version $version)
78
    {
79 9
        return $this->getTemplate()->write([
80 9
            $version->getVersion(),
81 9
            $version->getServices(),
82 9
            $version->getTimestamp(),
83 9
            $version->getRecipientAddress()->getBuffer(),
84 9
            $version->getSenderAddress()->getBuffer(),
85 9
            $version->getNonce(),
86 9
            $version->getUserAgent(),
87 9
            $version->getStartHeight(),
88 9
            $version->getRelay()
89 6
        ]);
90
    }
91
}
92