feat(game): 添加连胜触发的奖池刷新功能
- 添加奖池刷新定时器和延迟配置 - 实现从游戏大厅初始化获取最新奖池数据 - 添加连胜计数达到阈值时的奖池刷新调度逻辑 - 在用户连胜状态更新时触发奖池刷新检查 - 添加错误处理和调试日志 - 确保定时器正确清理避免内存泄漏
This commit is contained in:
@@ -221,6 +221,55 @@ function applyPeriodPayoutMessage(
|
||||
useGameRoundStore.getState().playPreparedRevealAnimation(roundId || null)
|
||||
}
|
||||
|
||||
let jackpotPoolRefreshTimerId: number | null = null
|
||||
|
||||
const JACKPOT_STREAK_TRIGGER_COUNT = 10
|
||||
const JACKPOT_POOL_REFRESH_DELAY_MS = 2_000
|
||||
|
||||
async function refreshJackpotPoolFromLobbyInit() {
|
||||
const authState = useAuthStore.getState()
|
||||
|
||||
if (authState.status !== 'authenticated' || !authState.accessToken) {
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await getGameLobbyInit()
|
||||
|
||||
useGameSessionStore.getState().syncDashboard({
|
||||
jackpotPool: result.snapshot.dashboard.jackpotPool,
|
||||
updatedAt: result.snapshot.dashboard.updatedAt,
|
||||
})
|
||||
} catch (error) {
|
||||
console.error(
|
||||
'Failed to refresh jackpot pool after streak milestone',
|
||||
error,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function scheduleJackpotPoolRefreshForStreak(
|
||||
previousStreak: number,
|
||||
nextStreak: number | undefined,
|
||||
) {
|
||||
if (
|
||||
nextStreak !== JACKPOT_STREAK_TRIGGER_COUNT ||
|
||||
previousStreak >= JACKPOT_STREAK_TRIGGER_COUNT ||
|
||||
typeof window === 'undefined'
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
||||
if (jackpotPoolRefreshTimerId !== null) {
|
||||
window.clearTimeout(jackpotPoolRefreshTimerId)
|
||||
}
|
||||
|
||||
jackpotPoolRefreshTimerId = window.setTimeout(() => {
|
||||
jackpotPoolRefreshTimerId = null
|
||||
void refreshJackpotPoolFromLobbyInit()
|
||||
}, JACKPOT_POOL_REFRESH_DELAY_MS)
|
||||
}
|
||||
|
||||
function applyUserStreakMessage(message: GameSocketMessage) {
|
||||
const streakData = extractUserStreakMessageData(message)
|
||||
const currentUser = useAuthStore.getState().currentUser
|
||||
@@ -229,6 +278,11 @@ function applyUserStreakMessage(message: GameSocketMessage) {
|
||||
return
|
||||
}
|
||||
|
||||
scheduleJackpotPoolRefreshForStreak(
|
||||
currentUser.currentStreak ?? 0,
|
||||
streakData.currentStreak,
|
||||
)
|
||||
|
||||
useAuthStore.getState().setCurrentUser({
|
||||
...currentUser,
|
||||
currentStreak: streakData.currentStreak,
|
||||
@@ -299,6 +353,11 @@ function applyBetWinMessage(message: GameSocketMessage) {
|
||||
return
|
||||
}
|
||||
|
||||
scheduleJackpotPoolRefreshForStreak(
|
||||
currentUser.currentStreak ?? 0,
|
||||
betWinData.current_streak,
|
||||
)
|
||||
|
||||
useAuthStore.getState().setCurrentUser({
|
||||
...currentUser,
|
||||
coin: betWinData.balance_after ?? currentUser.coin,
|
||||
|
||||
Reference in New Issue
Block a user