Files
lotteryLaravel/app/Events/PlayerSessionReplacedBroadcast.php
wchino 15bd997c4e
Some checks failed
lotterLaravel CI / test (push) Has been cancelled
lotterLaravel E2E / e2e-api (push) Has been cancelled
feat(core): harden sessions settlement and credit activity
2026-07-22 20:53:43 +08:00

54 lines
1.4 KiB
PHP

<?php
namespace App\Events;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
/** 通知旧客户端:同一原生玩家账号已有较新的登录会话。 */
final class PlayerSessionReplacedBroadcast implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public string $queue = 'broadcasts';
public int $tries = 3;
public int $timeout = 10;
public function __construct(
public readonly int $playerId,
public readonly int $sessionVersion,
public readonly int $emittedAtMs,
) {}
public function retryUntil(): \DateTimeInterface
{
return now()->addSeconds(30);
}
/** @return array<int, PrivateChannel> */
public function broadcastOn(): array
{
return [new PrivateChannel('player.'.$this->playerId)];
}
public function broadcastAs(): string
{
return 'session.replaced';
}
/** @return array{player_id: int, session_version: int, emitted_at_ms: int} */
public function broadcastWith(): array
{
return [
'player_id' => $this->playerId,
'session_version' => $this->sessionVersion,
'emitted_at_ms' => $this->emittedAtMs,
];
}
}