MessageHandler   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 47
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 4
dl 0
loc 47
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A setCallback() 0 4 1
A handleMessage() 0 16 6
1
<?php
2
namespace Cmp\Queues\Infrastructure\AmqpLib\v26\RabbitMQ\Queue;
3
4
use Cmp\Queues\Domain\Queue\Exception\InvalidJSONMessageException;
5
use Cmp\Queues\Domain\Queue\Exception\ReaderException;
6
use Cmp\Queues\Domain\Queue\JSONMessageFactory;
7
use Cmp\Queues\Domain\Task\Exception\ParseMessageException;
8
use Exception;
9
use PhpAmqpLib\Message\AMQPMessage;
10
11
class MessageHandler
12
{
13
    /**
14
     * @var JSONMessageFactory
15
     */
16
    private $jsonMessageFactory;
17
18
    /**
19
     * @var callable
20
     */
21
    private $callback;
22
23
    /**
24
     * MessageHandler constructor.
25
     * @param JSONMessageFactory $jsonMessageFactory
26
     */
27
    public function __construct(JSONMessageFactory $jsonMessageFactory)
28
    {
29
        $this->jsonMessageFactory = $jsonMessageFactory;
30
    }
31
32
    /**
33
     * @param AMQPMessage $message
34
     * @throws \Exception
35
     */
36
    public function handleMessage(AMQPMessage $message)
37
    {
38
        if (!isset($this->callback)) {
39
            throw new ReaderException("Handling a message with no callback set");
40
        }
41
42
        try {
43
            $task = $this->jsonMessageFactory->create($message->body);
44
            $response = call_user_func($this->callback, $task);
45
            if(is_null($response) || !is_bool($response) || $response) {
46
                $message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']);
47
            }
48
        } catch(InvalidJSONMessageException $e) {
49
            throw new ParseMessageException(json_encode($message->getBody()), 0, $e);
50
        }
51
    }
52
53
    public function setCallback(callable $callback)
54
    {
55
        $this->callback = $callback;
56
    }
57
}