1.优化websocket中的jackpot.hit

2.优化/api/game/betMyOrders接口,新增中奖号码字段result_number
This commit is contained in:
2026-05-28 17:13:59 +08:00
parent c3ac33ec3d
commit 99df6b378a
7 changed files with 118 additions and 2 deletions

View File

@@ -106,6 +106,61 @@ final class GameWebSocketSubscriptionRegistry
return $finalTopics;
}
/**
* 增量订阅:将 topics 合并到现有订阅集合(不会移除旧 topic
*
* 兼容部分客户端“多次 subscribe 但只携带增量 topic”的行为避免后续误覆盖导致 bet.win/jackpot.hit 丢订阅。
*
* @param list<string> $topics
* @return list<string> 合并后的订阅列表(去重排序)
*/
public static function mergeSubscriptions(int $connectionId, array $topics): array
{
if ($connectionId <= 0 || !isset(self::$connectionMeta[$connectionId])) {
return [];
}
$clean = [];
foreach ($topics as $t) {
if (!is_string($t)) {
continue;
}
$v = trim($t);
if ($v === '' || strlen($v) > 64) {
continue;
}
$clean[$v] = true;
}
if ($clean === []) {
return self::$connectionMeta[$connectionId]['topics'];
}
$existing = self::$connectionMeta[$connectionId]['topics'];
$mergedMap = [];
foreach ($existing as $t) {
$mergedMap[$t] = true;
}
foreach (array_keys($clean) as $t) {
$mergedMap[$t] = true;
}
$finalTopics = array_keys($mergedMap);
sort($finalTopics);
// 只需要把新增 topic 写入 topicIndex旧 topic 已存在索引)
$existingMap = [];
foreach ($existing as $t) {
$existingMap[$t] = true;
}
foreach ($finalTopics as $topic) {
if (!isset($existingMap[$topic])) {
self::$topicIndex[$topic][$connectionId] = true;
}
}
self::$connectionMeta[$connectionId]['topics'] = $finalTopics;
return $finalTopics;
}
/**
* 获取订阅了指定 topic 的所有 connection_id。
*