1.优化websocket中的jackpot.hit
2.优化/api/game/betMyOrders接口,新增中奖号码字段result_number
This commit is contained in:
@@ -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。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user