Completed
Pull Request — master (#12)
by thomas
18:29 queued 51s
created

DebugButtonAck   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
dl 0
loc 38
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A acknowledge() 0 18 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BitWasp\Trezor\Device\Button;
6
7
use BitWasp\Trezor\Bridge\Session;
8
use BitWasp\Trezor\Device\DebugMessage;
9
use BitWasp\Trezor\Device\Message;
10
use BitWasp\TrezorProto\ButtonRequest;
11
use BitWasp\TrezorProto\ButtonRequestType;
12
use BitWasp\TrezorProto\DebugLinkDecision;
13
14
class DebugButtonAck extends ButtonAck
15
{
16
    /**
17
     * @var Session
18
     */
19
    private $debug;
20
21
    /**
22
     * @var bool
23
     */
24
    private $button;
25
26
    public function __construct(
27
        Session $debugSession,
28
        bool $button
29
    ) {
30
        $this->debug = $debugSession;
31
        $this->button = $button;
32
    }
33
34
    public function acknowledge(
35
        Session $session,
36
        ButtonRequest $request,
37
        ButtonRequestType $expectedType
38
    ): \Protobuf\Message {
39
        $theirType = $request->getCode();
40
        if ($theirType->value() !== $expectedType->value()) {
41
            throw new \RuntimeException("Unexpected button request (expected: {$expectedType->name()}, got {$theirType->name()})");
42
        }
43
44
        $ack = new \BitWasp\TrezorProto\ButtonAck();
45
46
        $decision = new DebugLinkDecision();
47
        $decision->setYesNo($this->button);
48
49
        $success = $session->sendMessageAsync(Message::buttonAck($ack));
50
        $this->debug->postMessage(DebugMessage::decision($decision));
51
        return $success->wait(true);
52
    }
53
}
54