89 lines
2.6 KiB
Go
89 lines
2.6 KiB
Go
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, ","))
|
||
}
|
||
}
|