Completed
Push — master ( 209824...c4c942 )
by Leo
01:41
created

Api::messageTyped()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 2
dl 0
loc 7
ccs 0
cts 5
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace leocata\M1;
4
5
use leocata\M1\Abstracts\CallbackMethods;
6
use leocata\M1\Abstracts\RequestMethods;
7
use leocata\M1\Exceptions\MethodNotFound;
8
use leocata\M1\Exceptions\MissingMandatoryField;
9
use leocata\M1\InternalFunctionality\DummyLogger;
10
use leocata\M1\Methods\Request\ContactAccept;
11
use leocata\M1\Methods\Request\MessageDelivered;
12
use leocata\M1\Methods\Request\MessageTyped;
13
use leocata\M1\Methods\Request\SendMessage;
14
use Psr\Log\LoggerInterface;
15
16
/**
17
 * Class Api.
18
 */
19
class Api
20
{
21
    /**
22
     * @var DummyLogger|LoggerInterface
23
     */
24
    protected $logger;
25
    /**
26
     * @var
27
     */
28
    private $client;
29
    /**
30
     * @var
31
     */
32
    private $auth;
33
34
    /**
35
     * @param LoggerInterface $logger
36
     */
37 2
    public function __construct(LoggerInterface $logger = null)
38
    {
39 2
        if ($logger === null) {
40 2
            $logger = new DummyLogger();
41
        }
42 2
        $this->logger = $logger;
43 2
    }
44
45
    /**
46
     * @param string $data
47
     *
48
     * @throws MethodNotFound | MissingMandatoryField
49
     *
50
     * @return bool|CallbackMethods
51
     */
52 1
    public function getCallbackMethod(string $data)
53
    {
54 1
        $data = \GuzzleHttp\json_decode($data);
55 1
        if (empty($data->method)) {
56
            return false;
57
        }
58
59 1
        $class = '\leocata\M1\Methods\Callback\\'.ucfirst($data->method);
60
61 1
        if (!class_exists($class)) {
62
            throw new MethodNotFound(sprintf(
63
                'The method "%s" not found, please correct',
64
                $class
65
            ));
66
        }
67
68
        /** @var \leocata\M1\Abstracts\CallbackMethods $method */
69 1
        $method = new $class();
70 1
        $method->import($data->params ?? new \stdClass());
71
72 1
        return $method;
73
    }
74
75
    /**
76
     * Performs the request to the Api servers.
77
     *
78
     * @param RequestMethods $method
79
     *
80
     * @return RequestMethods
81
     */
82
    public function sendRequest(RequestMethods $method)
83
    {
84
        $this->client = new HttpClient($this->auth);
85
        $response = $this->client->getResponseContent($method->getRequestString());
86
        if (!empty($response)) {
87
            $method->setResult($response);
88
        }
89
90
        return $method;
91
    }
92
93
    /**
94
     * Quick send new message.
95
     *
96
     * @param $destination
97
     * @param $code
98
     * @param $type
99
     * @param $content
100
     *
101
     * @return RequestMethods
102
     */
103
    public function sendMessage($destination, $code, $type, $content)
104
    {
105
        $message = new SendMessage();
106
        $message->dest = $destination;
107
        $message->code = $code;
108
        $message->code = $type;
109
        $message->code = $content;
110
111
        return $this->sendRequest($message);
112
    }
113
114
    /**
115
     * Quick send message delivery status.
116
     *
117
     * @param $sessionId
118
     * @param $messageId
119
     *
120
     * @return RequestMethods
121
     */
122
    public function messageDelivered($sessionId, $messageId)
123
    {
124
        $messDelivered = new MessageDelivered();
125
        $messDelivered->sessionid = $sessionId;
126
        $messDelivered->messageid = $messageId;
127
128
        return $this->sendRequest($messDelivered);
129
    }
130
131
    /**
132
     * Send message type indicator
133
     *
134
     * @param $sessionId
135
     * @param $userId
136
     *
137
     * @return RequestMethods
138
     */
139
    public function messageTyped($sessionId, $userId)
140
    {
141
        $messageTyped = new MessageTyped();
142
        $messageTyped->sessionid = $sessionId;
143
        $messageTyped->userid = $userId;
144
145
        return $this->sendRequest($messageTyped);
146
    }
147
148
    /**
149
     * Send contact Accept.
150
     *
151
     * @param $userId
152
     * @param $message
153
     * @param $state
154
     *
155
     * @return RequestMethods
156
     */
157
    public function contactAccept($userId, $message, $state)
158
    {
159
        $contactAccept = new ContactAccept();
160
        $contactAccept->userid = $userId;
161
        $contactAccept->message = $message;
162
        $contactAccept->state = $state;
163
164
        return $this->sendRequest($contactAccept);
165
    }
166
167
    /**
168
     * @return Authorization
169
     */
170
    public function getAuth() : Authorization
171
    {
172
        return $this->auth;
173
    }
174
175
    /**
176
     * @param mixed Authorization
177
     */
178
    public function setAuth(Authorization $auth)
179
    {
180
        $this->auth = $auth;
181
    }
182
}
183