*/ class InMemoryTransport implements TransportInterface { /** @var callable(string, ?Uuid): void */ private $messageListener; /** @var callable(Uuid): void */ private $sessionDestroyListener; private ?Uuid $sessionId = null; /** * @param list $messages */ public function __construct( private readonly array $messages = [], ) { } public function initialize(): void { } public function onMessage(callable $listener): void { $this->messageListener = $listener; } public function send(string $data, array $context): void { if (isset($context['session_id'])) { $this->sessionId = $context['session_id']; } } public function listen(): mixed { foreach ($this->messages as $message) { if (\is_callable($this->messageListener)) { \call_user_func($this->messageListener, $message, $this->sessionId); } } if (\is_callable($this->sessionDestroyListener) && null !== $this->sessionId) { \call_user_func($this->sessionDestroyListener, $this->sessionId); } return null; } public function onSessionEnd(callable $listener): void { $this->sessionDestroyListener = $listener; } public function close(): void { if (\is_callable($this->sessionDestroyListener) && null !== $this->sessionId) { \call_user_func($this->sessionDestroyListener, $this->sessionId); } } }