Completed
Push — master ( 7a0d19...d0a94a )
by Arthur
07:51
created

Client::getMessages()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
/*
4
 * This file is part of the Pushok package.
5
 *
6
 * (c) Arthur Edamov <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Pushok;
13
14
/**
15
 * Class Client
16
 * @package Pushok
17
 */
18
class Client
19
{
20
    /**
21
     * Array of messages.
22
     *
23
     * @var Message[]
24
     */
25
    private $messages = [];
26
27
    /**
28
     * Authentication provider.
29
     *
30
     * @var AuthProviderInterface
31
     */
32
    private $authProvider;
33
34
    /**
35
     * Production or sandbox environment.
36
     *
37
     * @var bool
38
     */
39
    private $isProductionEnv;
40
41
    /**
42
     * Client constructor.
43
     *
44
     * @param AuthProviderInterface $authProvider
45
     * @param bool $isProductionEnv
46
     */
47
    public function __construct(AuthProviderInterface $authProvider, bool $isProductionEnv = false)
48
    {
49
        $this->authProvider = $authProvider;
50
        $this->isProductionEnv = $isProductionEnv;
51
    }
52
53
    /**
54
     * Push messages to APNs.
55
     *
56
     * @return array
57
     */
58
    public function push(): array
59
    {
60
        $curlHandle = curl_init();
61
62
        $responseCollection = [];
63
        foreach ($this->messages as $message) {
64
            $request = new Request($message, $this->isProductionEnv);
65
66
            $this->authProvider->authenticateClient($curlHandle);
67
68
            $result = $this->send($curlHandle, $request);
69
70
            list($headers, $body) = explode("\r\n\r\n", $result, 2);
71
72
            $statusCode = curl_getinfo($curlHandle, CURLINFO_HTTP_CODE);
73
74
            $responseCollection[] = new Response($statusCode, $headers, $body);
75
        }
76
77
        curl_close($curlHandle);
78
79
        return $responseCollection;
80
    }
81
82
    /**
83
     * Send request.
84
     *
85
     * @param $curlHandle
86
     * @param Request $request
87
     *
88
     * @return mixed Return the result on success, false on failure
89
     */
90
    private function send($curlHandle, Request $request)
91
    {
92
        curl_setopt_array($curlHandle, $request->getOptions());
93
94
        return curl_exec($curlHandle);
95
    }
96
97
    /**
98
     * Add message in queue for sending.
99
     *
100
     * @param Message $message
101
     */
102
    public function addMessage(Message $message)
103
    {
104
        $this->messages[] = $message;
105
    }
106
107
    /**
108
     * Add several messages in queue for sending.
109
     *
110
     * @param Message[] $messages
111
     */
112
    public function addMessages(array $messages)
113
    {
114
        $this->messages = array_merge($this->messages, $messages);
115
    }
116
117
    /**
118
     * Get already added messages.
119
     *
120
     * @return Message[]
121
     */
122
    public function getMessages()
123
    {
124
        return $this->messages;
125
    }
126
}
127