aboutsummaryrefslogtreecommitdiff
path: root/src/messages
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2023-04-13 02:14:53 +0300
committerEvgeny Zinoviev <me@ch1p.io>2023-04-13 02:14:53 +0300
commitd0fa8d6f63003a6cb2f1897158bc587ab2344ea3 (patch)
tree5a6c165e928354a59eea48030c5de51067d381e4 /src/messages
parent5272c5f541a75b2a7824df4264ad7e69c6e346fa (diff)
1.6.0: support signals
Diffstat (limited to 'src/messages')
-rw-r--r--src/messages/Message.php43
-rw-r--r--src/messages/PingMessage.php17
-rw-r--r--src/messages/PongMessage.php17
-rw-r--r--src/messages/RequestMessage.php60
-rw-r--r--src/messages/ResponseMessage.php69
5 files changed, 206 insertions, 0 deletions
diff --git a/src/messages/Message.php b/src/messages/Message.php
new file mode 100644
index 0000000..df7464e
--- /dev/null
+++ b/src/messages/Message.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace jobd\messages;
+
+
+abstract class Message {
+
+ const REQUEST = 0;
+ const RESPONSE = 1;
+ const PING = 2;
+ const PONG = 3;
+
+ protected $type;
+
+ /**
+ * Message constructor.
+ * @param int $type
+ */
+ public function __construct(int $type)
+ {
+ $this->type = $type;
+ }
+
+ /**
+ * @return array
+ */
+ abstract protected function getContent(): array;
+
+ /**
+ * @return string
+ */
+ public function serialize(): string
+ {
+ $data = [$this->type];
+ $content = $this->getContent();
+
+ if (!empty($content))
+ $data[] = $content;
+
+ return json_encode($data);
+ }
+
+} \ No newline at end of file
diff --git a/src/messages/PingMessage.php b/src/messages/PingMessage.php
new file mode 100644
index 0000000..fa61379
--- /dev/null
+++ b/src/messages/PingMessage.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace jobd\messages;
+
+class PingMessage extends Message {
+
+ public function __construct()
+ {
+ parent::__construct(Message::PING);
+ }
+
+ protected function getContent(): array
+ {
+ return [];
+ }
+
+} \ No newline at end of file
diff --git a/src/messages/PongMessage.php b/src/messages/PongMessage.php
new file mode 100644
index 0000000..00bb499
--- /dev/null
+++ b/src/messages/PongMessage.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace jobd\messages;
+
+class PongMessage extends Message {
+
+ public function __construct()
+ {
+ parent::__construct(Message::PING);
+ }
+
+ protected function getContent(): array
+ {
+ return [];
+ }
+
+} \ No newline at end of file
diff --git a/src/messages/RequestMessage.php b/src/messages/RequestMessage.php
new file mode 100644
index 0000000..12ab7ad
--- /dev/null
+++ b/src/messages/RequestMessage.php
@@ -0,0 +1,60 @@
+<?php
+
+namespace jobd\messages;
+
+class RequestMessage extends Message {
+
+ protected $requestNo;
+ protected $requestType;
+ protected $requestData;
+ protected $password;
+
+ /**
+ * Request constructor.
+ * @param string $request_type
+ * @param null|array $request_data
+ */
+ public function __construct(string $request_type, $request_data = null)
+ {
+ parent::__construct(Message::REQUEST);
+
+ $this->requestData = $request_data;
+ $this->requestType = $request_type;
+ }
+
+ /**
+ * @param string $password
+ */
+ public function setPassword(string $password)
+ {
+ $this->password = $password;
+ }
+
+ /**
+ * @param int $no
+ */
+ public function setRequestNo(int $no)
+ {
+ $this->requestNo = $no;
+ }
+
+ /**
+ * @return string[]
+ */
+ protected function getContent(): array
+ {
+ $request = [
+ 'type' => $this->requestType,
+ 'no' => $this->requestNo,
+ ];
+
+ if (!is_null($this->requestData))
+ $request['data'] = (object)$this->requestData;
+
+ if (!is_null($this->password))
+ $request['password'] = $this->password;
+
+ return $request;
+ }
+
+} \ No newline at end of file
diff --git a/src/messages/ResponseMessage.php b/src/messages/ResponseMessage.php
new file mode 100644
index 0000000..5101ed4
--- /dev/null
+++ b/src/messages/ResponseMessage.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace jobd\messages;
+
+class ResponseMessage extends Message {
+
+ protected $requestNo;
+ protected $error;
+ protected $data;
+
+ /**
+ * Response constructor.
+ *
+ * @param int $request_no
+ * @param null $error
+ * @param null $data
+ */
+ public function __construct(int $request_no, $error = null, $data = null)
+ {
+ parent::__construct(Message::RESPONSE);
+
+ $this->requestNo = $request_no;
+ $this->error = $error;
+ $this->data = $data;
+ }
+
+ /**
+ * @return array
+ */
+ protected function getContent(): array
+ {
+ $response = [
+ 'no' => $this->requestNo
+ ];
+
+ if (!is_null($this->error))
+ $response['error'] = $this->error;
+
+ if (!is_null(!$this->data))
+ $response['data'] = $this->data;
+
+ return $response;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getError()
+ {
+ return $this->error;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getData()
+ {
+ return $this->data;
+ }
+
+ /**
+ * @return int
+ */
+ public function getRequestNo(): int
+ {
+ return $this->requestNo;
+ }
+
+} \ No newline at end of file