Initial commit

This commit is contained in:
2025-12-29 16:27:01 +00:00
committed by Siteworx Pro Gitea
commit 23f2b6432b
147 changed files with 14731 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
<?php
declare(strict_types=1);
namespace Siteworxpro\App\Async\Messages;
use Siteworxpro\App\Async\Queues\DefaultQueue;
use Siteworxpro\App\Async\Queues\Queue;
use Siteworxpro\App\Helpers\Ulid;
abstract class Message implements \Serializable
{
protected string $id = '';
protected string $uniqueId;
protected array $payload;
protected int $timestamp;
protected string $queue = '';
protected const string DEFAULT_QUEUE = DefaultQueue::class;
abstract public static function dispatch(...$args): void;
abstract public static function dispatchLater(int $delay, ...$args): void;
public function __construct()
{
$this->uniqueId = Ulid::generate();
$this->timestamp = time();
}
protected function getQueue(): Queue
{
if ($this->queue === '') {
$this->queue = static::DEFAULT_QUEUE;
}
return new $this->queue();
}
public function getId(): string
{
return $this->id;
}
/**
* @param string $id
*/
public function setId(string $id): void
{
$this->id = $id;
}
public function getPayload(): array
{
return $this->payload;
}
public function getTimestamp(): int
{
return $this->timestamp;
}
public function __serialize(): array
{
return [
'id' => $this->id,
'payload' => $this->payload,
'timestamp' => $this->timestamp,
'queue' => $this->queue,
];
}
public function __unserialize(array $data): void
{
$this->id = $data['id'];
$this->payload = $data['payload'];
$this->timestamp = $data['timestamp'];
$this->queue = $data['queue'];
}
public function serialize(): string
{
return serialize($this);
}
public function unserialize(string $data): Message
{
$unserializedData = unserialize($data, ['allowed_classes' => [Message::class]]);
$this->id = $unserializedData['id'];
$this->uniqueId = $unserializedData['uniqueId'];
$this->payload = $unserializedData['payload'];
$this->timestamp = $unserializedData['timestamp'];
$this->queue = $unserializedData['queue'];
return $this;
}
}