|null $state */ public function __construct( public readonly string $roomId, public readonly int $version, public readonly RoomStateChange $change, public readonly ?array $state = null, public readonly ?int $affectedPlayerId = null, ) {} public function broadcastOn(): Channel { return new Channel("rooms.{$this->roomId}"); } public function broadcastAs(): string { return 'room.state.changed'; } /** * @return array{version: int, change: string, state: array|null, affected_player_id?: int} */ public function broadcastWith(): array { $payload = [ 'version' => $this->version, 'change' => $this->change->value, 'state' => $this->state, ]; if ($this->affectedPlayerId !== null) { $payload['affected_player_id'] = $this->affectedPlayerId; } return $payload; } }