Completed
Push — master ( 613d98...fa04c9 )
by Rémi
20:40
created

QueueHandlingDaemon::start()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 18
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 11
nc 1
nop 0
1
<?php
2
3
namespace Burrow\Daemon;
4
5
use Burrow\ConsumeOptions;
6
use Evaneos\Daemon\Daemon;
7
use Evaneos\Daemon\DaemonMonitor;
8
use Burrow\Driver;
9
use Burrow\Message;
10
use Evaneos\Daemon\Monitor\NullMonitor;
11
use Burrow\QueueHandler;
12
use Psr\Log\LoggerAwareInterface;
13
use Psr\Log\LoggerAwareTrait;
14
use Psr\Log\NullLogger;
15
16
class QueueHandlingDaemon implements Daemon, LoggerAwareInterface
17
{
18
    use LoggerAwareTrait;
19
    
20
    /** @var Driver */
21
    private $driver;
22
23
    /** @var QueueHandler */
24
    private $handler;
25
26
    /** @var string */
27
    private $queueName;
28
29
    /** @var DaemonMonitor */
30
    private $monitor;
31
32
    /**
33
     * Handler constructor.
34
     *
35
     * @param Driver        $driver
36
     * @param QueueHandler $handler
37
     * @param string        $queueName
38
     */
39
    public function __construct(Driver $driver, QueueHandler $handler, $queueName)
40
    {
41
        $this->driver = $driver;
42
        $this->handler = $handler;
43
        $this->queueName = $queueName;
44
45
        $this->monitor = new NullMonitor();
46
        $this->logger = new NullLogger();
47
    }
48
49
    /**
50
     * Run the daemon
51
     *
52
     * @return void
53
     */
54
    public function start()
55
    {
56
        $this->logger->info('Starting daemon...');
57
58
        $options = $this->handler->options(new ConsumeOptions());
59
60
        $this->driver->consume(
61
            $this->queueName,
62
            function (Message $message) {
63
                $this->monitor->monitor($this, $message);
64
                return $this->handler->handle($message);
65
            },
66
            $options->getTimeout(),
67
            $options->isAutoAck()
68
        );
69
70
        $this->stop();
71
    }
72
73
    /**
74
     * Stop the daemon
75
     *
76
     * @return void
77
     */
78
    public function stop()
79
    {
80
        $this->logger->info('Closing daemon...');
81
82
        $this->driver->close();
83
    }
84
85
    /**
86
     * Set a monitor.
87
     *
88
     * @param DaemonMonitor $monitor
89
     */
90
    public function setMonitor(DaemonMonitor $monitor)
91
    {
92
        $this->monitor = $monitor;
93
    }
94
}
95