2026-06-08 19:00:23 +08:00

89 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package game
import (
"encoding/json"
"net/url"
"strings"
gamedomain "hyapp/services/game-service/internal/domain/game"
)
type bridgeScriptConfig struct {
URL string `json:"bridge_script_url"`
URLAlias string `json:"bridgeScriptUrl"`
Version string `json:"bridge_script_version"`
VersionAlias string `json:"bridgeScriptVersion"`
SHA256 string `json:"bridge_script_sha256"`
SHA256Alias string `json:"bridgeScriptSha256"`
SHA256AltAlias string `json:"bridge_script_hash"`
}
func bridgeScriptConfigFromPlatform(value any) bridgeScriptConfig {
var raw string
switch typed := value.(type) {
case gamedomain.Platform:
raw = typed.AdapterConfigJSON
case gamedomain.LaunchableGame:
raw = typed.AdapterConfigJSON
}
var config bridgeScriptConfig
_ = json.Unmarshal([]byte(strings.TrimSpace(raw)), &config)
config.URL = firstBridgeScriptValue(config.URL, config.URLAlias)
config.Version = firstBridgeScriptValue(config.Version, config.VersionAlias)
config.SHA256 = firstBridgeScriptValue(config.SHA256, config.SHA256Alias, config.SHA256AltAlias)
return config
}
func firstBridgeScriptValue(values ...string) string {
for _, value := range values {
normalized := strings.TrimSpace(value)
if normalized != "" {
return normalized
}
}
return ""
}
func appendBridgeScriptQuery(query url.Values, game gamedomain.LaunchableGame) {
config := bridgeScriptConfigFromPlatform(game)
if config.URL == "" {
return
}
// Flutter 从启动 URL 还原 bridgeConfig同时写 snake/camel 别名,避免 H5 或老客户端只识别其中一种命名。
query.Set("bridge_script_url", config.URL)
query.Set("bridgeScriptUrl", config.URL)
if config.Version != "" {
query.Set("bridge_script_version", config.Version)
query.Set("bridgeScriptVersion", config.Version)
}
if config.SHA256 != "" {
query.Set("bridge_script_sha256", config.SHA256)
query.Set("bridgeScriptSha256", config.SHA256)
}
appendBridgeKeys(query, "bridge_script_url", "bridge_script_version", "bridge_script_sha256")
}
func appendBridgeKeys(query url.Values, keys ...string) {
seen := make(map[string]bool)
values := make([]string, 0, len(keys)+1)
for _, raw := range strings.Split(query.Get("bridge_keys"), ",") {
key := strings.TrimSpace(raw)
if key == "" || seen[key] {
continue
}
seen[key] = true
values = append(values, key)
}
for _, raw := range keys {
key := strings.TrimSpace(raw)
if key == "" || seen[key] {
continue
}
seen[key] = true
values = append(values, key)
}
if len(values) > 0 {
query.Set("bridge_keys", strings.Join(values, ","))
}
}