id = (string)Uuid::v7(); $this->stream->on('text', $this->onWebSocketData(...)); } private function onWebSocketData(string $data): void { $toks = str_getcsv($data, " "); switch (array_shift($toks)) { case 'auth': $this->stream->write('{"ok":true}'); break; case 'subscribe': $this->topicManager->subscribe($this, $toks); $this->stream->write('{"ok":true}'); break; case 'unsubscribe': $this->topicManager->unsubscribe($this, $toks); $this->stream->write('{"ok":true}'); break; default: $this->stream->write('{"ok":false}'); } } public function deliver(Message $message): void { $this->stream->write(json_encode([ 'event' => $message->type, 'topic' => $message->topic, 'data' => $message->data ], JSON_UNESCAPED_SLASHES)); } public function isAuthenticated(): bool { return $this->token && $this->token->isValid(); } public function getMercureClaims(): ?array { return $this->request->getAttribute('mercure.claims'); } public function getPayload(): array { return $this->request->getAttribute('mercure.payload')??[]; } public function getId(): string { return "urn:uuid:".$this->id; } }