Queue::addMessage()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 8
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 4
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Tasksuki\Component\Queue;
4
5
use Tasksuki\Component\Message\Message;
6
use Tasksuki\Component\Driver\DriverInterface;
7
use Tasksuki\Component\Handler\NullHandler;
8
use Tasksuki\Component\Handler\HandlerInterface;
9
use Tasksuki\Component\Serializer\SerializerInterface;
10
11
/**
12
 * Class Queue
13
 *
14
 * @package Tasksuki\Component\Queue
15
 * @author  Aurimas Niekis <[email protected]>
16
 */
17
class Queue
18
{
19
    /**
20
     * @var string
21
     */
22
    private $name;
23
24
    /**
25
     * @var DriverInterface
26
     */
27
    private $driver;
28
29
    /**
30
     * @var SerializerInterface
31
     */
32
    private $serializer;
33
34
    /**
35
     * @var HandlerInterface
36
     */
37
    private $handler;
38
39 2
    public function __construct(
40
        string $name,
41
        DriverInterface $driver,
42
        SerializerInterface $serializer,
43
        HandlerInterface $handler = null
44
    ) {
45 2
        $this->name = $name;
46 2
        $this->driver = $driver;
47 2
        $this->serializer = $serializer;
48 2
        $this->handler = $handler ?? new NullHandler();
49 2
    }
50
51
    /**
52
     * @return string
53
     */
54 2
    public function getName(): string
55
    {
56 2
        return $this->name;
57
    }
58
59
    /**
60
     * @return DriverInterface
61
     */
62 2
    public function getDriver(): DriverInterface
63
    {
64 2
        return $this->driver;
65
    }
66
67
    /**
68
     * @return SerializerInterface
69
     */
70 2
    public function getSerializer(): SerializerInterface
71
    {
72 2
        return $this->serializer;
73
    }
74
75
    /**
76
     * @return HandlerInterface
77
     */
78 1
    public function getHandler(): HandlerInterface
79
    {
80 1
        return $this->handler;
81
    }
82
83
    /**
84
     * @param HandlerInterface $handler
85
     *
86
     * @return Queue
87
     */
88 1
    public function setHandler(HandlerInterface $handler): Queue
89
    {
90 1
        $this->handler = $handler;
91
92 1
        return $this;
93
    }
94
95 1
    public function addMessage(Message $message)
96
    {
97 1
        $data = $this->getSerializer()->serialize($message);
98
99 1
        $this->getDriver()->send($this->getName(), $data);
100
101 1
        return $message;
102
    }
103
104
    public function checkQueue()
105
    {
106 1
        $callback = function (string $data) {
107 1
            $message = $this->getSerializer()->unserialize($data);
108
109 1
            $this->getHandler()->handle($message);
110 1
        };
111
112 1
        $this->getDriver()->receive($this->getName(), $callback);
113
    }
114
}