addSeconds(30); } /** * @param string $playCode 玩法代码(如 straight_4d, box_2d 等) * @param bool $enabled 是否启用 * @param string|null $reason 变更原因(可选) * @param int $emittedAtMs 发送时间戳(毫秒) */ public function __construct( public readonly string $playCode, public readonly bool $enabled, public readonly ?string $reason, public readonly int $emittedAtMs, ) {} /** * 公共频道,所有在大厅的玩家都能收到。 * * @return array */ public function broadcastOn(): array { return [new Channel('lottery-hall')]; } public function broadcastAs(): string { return 'play.toggle'; } /** * @return array{play_code: string, enabled: bool, reason: string|null, action: string, emitted_at_ms: int} */ public function broadcastWith(): array { return [ 'play_code' => $this->playCode, 'enabled' => $this->enabled, 'reason' => $this->reason, 'action' => $this->enabled ? 'enabled' : 'disabled', 'emitted_at_ms' => $this->emittedAtMs, ]; } }