summaryrefslogtreecommitdiffstats
path: root/vendor/gipfl/simple-daemon/src/DaemonState.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/gipfl/simple-daemon/src/DaemonState.php')
-rw-r--r--vendor/gipfl/simple-daemon/src/DaemonState.php172
1 files changed, 172 insertions, 0 deletions
diff --git a/vendor/gipfl/simple-daemon/src/DaemonState.php b/vendor/gipfl/simple-daemon/src/DaemonState.php
new file mode 100644
index 0000000..923a546
--- /dev/null
+++ b/vendor/gipfl/simple-daemon/src/DaemonState.php
@@ -0,0 +1,172 @@
+<?php
+
+namespace gipfl\SimpleDaemon;
+
+use Evenement\EventEmitterInterface;
+use Evenement\EventEmitterTrait;
+use gipfl\Json\JsonSerialization;
+use function implode;
+use function strlen;
+
+class DaemonState implements JsonSerialization, EventEmitterInterface
+{
+ use EventEmitterTrait;
+
+ const ON_CHANGE = 'change';
+
+ /** @var string */
+ protected $processTitle;
+
+ /** @var ?string */
+ protected $state;
+
+ /** @var ?string */
+ protected $currentProcessTitle;
+
+ /** @var ?string */
+ protected $currentMessage;
+
+ /** @var string[] */
+ protected $componentStates = [];
+
+ /**
+ * @return string
+ */
+ public function getProcessTitle()
+ {
+ return $this->processTitle;
+ }
+
+ /**
+ * @param string $processTitle
+ * @return DaemonState
+ */
+ public function setProcessTitle($processTitle)
+ {
+ $this->processTitle = $processTitle;
+ $this->refreshMessage();
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getState()
+ {
+ return $this->state;
+ }
+
+ /**
+ * @param string|null $state
+ * @return DaemonState
+ */
+ public function setState($state)
+ {
+ $this->state = $state;
+ $this->refreshMessage();
+
+ return $this;
+ }
+
+ /**
+ * @return string|null
+ */
+ public function getCurrentMessage()
+ {
+ return $this->currentMessage;
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getComponentStates()
+ {
+ return $this->componentStates;
+ }
+
+ /**
+ * @param string[] $componentStates
+ * @return DaemonState
+ */
+ public function setComponentStates($componentStates)
+ {
+ $this->componentStates = $componentStates;
+ $this->refreshMessage();
+ return $this;
+ }
+
+ /**
+ * @param string $name
+ * @param string $stateMessage
+ * @return $this
+ */
+ public function setComponentState($name, $stateMessage)
+ {
+ if ($stateMessage === null) {
+ unset($this->componentStates[$name]);
+ } else {
+ $this->componentStates[$name] = $stateMessage;
+ }
+ $this->refreshMessage();
+
+ return $this;
+ }
+
+ public function getComponentState($name)
+ {
+ if (isset($this->componentStates[$name])) {
+ return $this->componentStates[$name];
+ }
+
+ return null;
+ }
+
+ public static function fromSerialization($any)
+ {
+ $self = new static();
+ if (isset($any->state)) {
+ $self->state = $any->state;
+ }
+ if (isset($any->currentMessage)) {
+ $self->currentMessage = $any->currentMessage;
+ }
+ if (isset($any->processTitle)) {
+ $self->processTitle = $any->processTitle;
+ }
+ if (isset($any->components)) {
+ $self->componentStates = $any->components;
+ }
+
+ return $self;
+ }
+
+ #[\ReturnTypeWillChange]
+ public function jsonSerialize()
+ {
+ return (object) [
+ 'state' => $this->state,
+ 'currentMessage' => $this->currentMessage,
+ 'processTitle' => $this->processTitle,
+ 'components' => $this->componentStates
+ ];
+ }
+
+ protected function refreshMessage()
+ {
+ $messageParts = [];
+ $state = $this->getState();
+ if ($state !== null && strlen($state)) {
+ $messageParts[] = $state;
+ }
+ foreach ($this->getComponentStates() as $component => $message) {
+ $messageParts[] = "$component: $message";
+ }
+
+ $message = implode(', ', $messageParts);
+ if ($message !== $this->currentMessage || $this->processTitle !== $this->currentProcessTitle) {
+ $this->currentMessage = $message;
+ $this->currentProcessTitle = $this->processTitle;
+ $this->emit(self::ON_CHANGE, [$this->currentProcessTitle, $this->currentMessage]);
+ }
+ }
+}