RedisReceive::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 6
c 0
b 0
f 0
rs 9.4285
cc 1
eloc 4
nc 1
nop 3
1
<?php
2
3
namespace Saxulum\MessageQueue\Redis;
4
5
use Predis\ClientInterface;
6
use Saxulum\MessageQueue\AbstractMessageReceive;
7
use Saxulum\MessageQueue\MessageInterface;
8
use Saxulum\MessageQueue\MessageReceiveException;
9
10
final class RedisReceive extends AbstractMessageReceive
11
{
12
    /**
13
     * @var string
14
     */
15
    private $messageClass;
16
17
    /**
18
     * @var ClientInterface
19
     */
20
    private $redis;
21
22
    /**
23
     * @var string
24
     */
25
    private $list;
26
27
    /**
28
     * @param string          $messageClass
29
     * @param ClientInterface $redis
30
     * @param string          $list
31
     */
32
    public function __construct(string $messageClass, ClientInterface $redis, string $list)
33
    {
34
        $this->messageClass = $messageClass;
35
        $this->redis = $redis;
36
        $this->list = $list;
37
    }
38
39
    /**
40
     * @return MessageInterface|null
41
     *
42
     * @throws MessageReceiveException
43
     */
44
    public function receive()
45
    {
46
        try {
47
            if (null === $json = $this->redis->lpop($this->list)) {
48
                return null;
49
            }
50
51
            /** @var MessageInterface $messageClass */
52
            $messageClass = $this->messageClass;
53
54
            return $messageClass::fromJson($json);
55
        } catch (\Exception $e) {
56
            throw new MessageReceiveException(
57
                MessageReceiveException::MESSAGE_RECEIVE_FAILED.'('.$e->getMessage().')',
58
                MessageReceiveException::CODE_RECEIVE_FAILED,
59
                $e
60
            );
61
        }
62
    }
63
}
64