Queue::send()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 8
nc 1
nop 1
dl 0
loc 14
rs 9.4285
c 0
b 0
f 0
1
<?php
2
namespace Tavii\SQSJobQueue\Queue;
3
4
use Aws\Sqs\SqsClient;
5
use Tavii\SQSJobQueue\Job\JobInterface;
6
use Tavii\SQSJobQueue\Queue\QueueName;
7
use Tavii\SQSJobQueue\Message\Message;
8
use Tavii\SQSJobQueue\Message\MessageInterface;
9
10
class Queue implements QueueInterface
11
{
12
    /**
13
     * Aamazon SQS Client
14
     * @var SqsClient
15
     */
16
    private $client;
17
18
    /**
19
     * @param SqsClient $client
20
     */
21
    public function __construct(SqsClient $client)
22
    {
23
        $this->client = $client;
24
    }
25
26
    /**
27
     * {@inheritdoc}
28
     */
29
    public function send(JobInterface $job)
30
    {
31
        $queueUrl = $this->client->getQueueUrl(array(
32
            'QueueName' => $job->getJobName()->getQueueName()
33
        ));
34
35
        return $this->client->sendMessage(array(
36
            'QueueUrl' => $queueUrl['QueueUrl'],
37
            'MessageBody' => json_encode(array(
38
                'className' => $job->getClassName(),
39
                'args' => $job->getArgs()
40
            ))
41
        ));
42
    }
43
44
    /**
45
     * {@inheritdoc}
46
     */
47
    public function receive(QueueName $queueName)
48
    {
49
        $queueUrl = $this->client->getQueueUrl(array(
50
            'QueueName' => $queueName->getQueueName()
51
        ));
52
53
        $result = $this->client->receiveMessage(array(
54
            'QueueUrl' => $queueUrl['QueueUrl']
55
        ));
56
        $messages = $result->getPath('Messages/*');
57
58
        if (!empty($messages)) {
59
            $args = json_decode($messages['Body'], true);
60
            $job = new $args['className']($args['args']);
61
            return new Message($messages, $job, $queueUrl['QueueUrl']);
62
        }
63
        return null;
64
    }
65
66
    /**
67
     * {@inheritdoc}
68
     */
69
    public function delete(MessageInterface $message)
70
    {
71
        $messageArray = $message->getMessage();
72
        return $this->client->deleteMessage(array(
73
            'QueueUrl' => $message->getQueueUrl(),
74
            'ReceiptHandle' => $messageArray['ReceiptHandle']
75
        ));
76
    }
77
78
79
}