优化游戏通知
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* 文件功能:游戏下注公屏与右下角通知广播服务
|
||||
*
|
||||
* 统一处理百家乐、赛马、双色球等游戏下注成功后的公屏消息、
|
||||
* 右下角 Toast 通知载荷和异步落库,避免各玩法重复拼装广播结构。
|
||||
*/
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use App\Events\MessageSent;
|
||||
use App\Jobs\SaveMessageJob;
|
||||
|
||||
/**
|
||||
* 类功能:为游戏下注成功事件生成并广播全员可见通知。
|
||||
*/
|
||||
class GameBetBroadcastService
|
||||
{
|
||||
public function __construct(
|
||||
private readonly ChatStateService $chatState,
|
||||
) {}
|
||||
|
||||
/**
|
||||
* 广播百家乐下注成功通知。
|
||||
*/
|
||||
public function baccarat(int $roomId, string $username, int $amount, string $betLabel): void
|
||||
{
|
||||
$formattedAmount = number_format($amount);
|
||||
|
||||
$this->pushBetMessage(
|
||||
roomId: $roomId,
|
||||
content: "🎲 <b>【百家乐】【{$username}】</b> 押注了 <b>{$formattedAmount}</b> 金币({$betLabel})!✨",
|
||||
fontColor: '#d97706',
|
||||
toastTitle: '🎲 有人下注百家乐',
|
||||
toastMessage: "<b>{$username}</b> 押注 <b>{$formattedAmount}</b> 金币({$betLabel})",
|
||||
toastIcon: '🎲',
|
||||
toastColor: '#d97706',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 广播赛马下注成功通知。
|
||||
*/
|
||||
public function horseRace(int $roomId, string $username, int $amount, string $horseName): void
|
||||
{
|
||||
$formattedAmount = number_format($amount);
|
||||
|
||||
$this->pushBetMessage(
|
||||
roomId: $roomId,
|
||||
content: "🐎 <b>【赛马】【{$username}】</b> 押注了 <b>{$formattedAmount}</b> 金币({$horseName})!✨",
|
||||
fontColor: '#d97706',
|
||||
toastTitle: '🐎 有人下注赛马',
|
||||
toastMessage: "<b>{$username}</b> 押注 <b>{$formattedAmount}</b> 金币({$horseName})",
|
||||
toastIcon: '🐎',
|
||||
toastColor: '#d97706',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 广播双色球购票成功通知。
|
||||
*/
|
||||
public function lottery(int $roomId, string $username, string $issueNo, string $numbersLabel, int $ticketCount): void
|
||||
{
|
||||
$moreText = $ticketCount > 1 ? "等 {$ticketCount} 注号码" : '';
|
||||
|
||||
$this->pushBetMessage(
|
||||
roomId: $roomId,
|
||||
content: "🎟️ 【{$username}】购买 {$issueNo} 期 {$numbersLabel} {$moreText}",
|
||||
fontColor: '#dc2626',
|
||||
toastTitle: '🎟️ 有人购买双色球',
|
||||
toastMessage: "<b>{$username}</b> 购买 {$issueNo} 期 {$numbersLabel} {$moreText}",
|
||||
toastIcon: '🎟️',
|
||||
toastColor: '#dc2626',
|
||||
action: '大声宣告',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送带右下角通知载荷的公屏游戏下注消息。
|
||||
*/
|
||||
private function pushBetMessage(
|
||||
int $roomId,
|
||||
string $content,
|
||||
string $fontColor,
|
||||
string $toastTitle,
|
||||
string $toastMessage,
|
||||
string $toastIcon,
|
||||
string $toastColor,
|
||||
string $action = '',
|
||||
): void {
|
||||
$message = [
|
||||
'id' => $this->chatState->nextMessageId($roomId),
|
||||
'room_id' => $roomId,
|
||||
'from_user' => '系统传音',
|
||||
'to_user' => '大家',
|
||||
'content' => $content,
|
||||
'is_secret' => false,
|
||||
'font_color' => $fontColor,
|
||||
'action' => $action,
|
||||
'sent_at' => now()->toDateTimeString(),
|
||||
'toast_notification' => [
|
||||
'title' => $toastTitle,
|
||||
'message' => $toastMessage,
|
||||
'icon' => $toastIcon,
|
||||
'color' => $toastColor,
|
||||
'duration' => 8000,
|
||||
],
|
||||
];
|
||||
|
||||
// 下注通知必须进房间 Presence 频道,确保当前房间所有在线人员都能看到右下角提示。
|
||||
$this->chatState->pushMessage($roomId, $message);
|
||||
event(new MessageSent($roomId, $message));
|
||||
SaveMessageJob::dispatch($message);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user