Completed
Pull Request — master (#12)
by thomas
19:02 queued 01:07
created

DebugButtonAck::acknowledge()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 9
nc 2
nop 3
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