You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.9 KiB
121 lines
3.9 KiB
package gs |
|
|
|
import ( |
|
"fmt" |
|
"server/call" |
|
"server/common" |
|
"server/config" |
|
"server/db" |
|
"server/modules/web/providers/base" |
|
"server/util" |
|
"time" |
|
|
|
"github.com/liangdas/mqant/log" |
|
) |
|
|
|
type Sub struct { |
|
Base *base.Base |
|
} |
|
|
|
func NewSub(base *base.Base) { |
|
base.Sub = &Sub{Base: base} |
|
base.SubInitRouter = GS |
|
} |
|
|
|
func (s *Sub) Init() { |
|
API = APITest |
|
AgentMap = AgentMapTest |
|
if config.GetBase().Release { |
|
API = APIRlease |
|
AgentMap = AgentMapRelease |
|
} |
|
} |
|
|
|
type EnterGameReq struct { |
|
OperatorCode string `json:"OperatorCode"` // Seamless运算符的唯一标识符 (Yes) |
|
MemberName string `json:"MemberName"` // 操作员的玩家唯一标识符 (Yes) |
|
DisplayName string `json:"DisplayName,omitempty"` // 玩家的显示名称 (No) |
|
Password string `json:"Password,omitempty"` // 操作员中的玩家密码 (No) |
|
GameID string `json:"GameID,omitempty"` // 独特的提供商游戏代码 (No) |
|
ProviderGameType string `json:"ProviderGameType,omitempty"` // 供应商的游戏类型 (No) |
|
ProductID int `json:"ProductID"` // Seamless产品的唯一标识符 (Yes) |
|
GameType int `json:"GameType"` // 游戏类型 (Yes) |
|
LanguageCode int `json:"LanguageCode"` // 语言代码 (Yes) |
|
Platform int `json:"Platform"` // 平台 (Yes) |
|
IPAddress string `json:"IPAddress"` // 客户端的 IP 地址 (Yes) |
|
OperatorLobbyURL string `json:"OperatorLobbyURL,omitempty"` // 运营商主页的URL (No) |
|
Sign string `json:"Sign"` // 请求的签名 (Yes) |
|
RequestTime string `json:"RequestTime"` // DateTime 格式为 yyyMDDHHMMSS (Yes) |
|
} |
|
|
|
type EnterGameResp struct { |
|
ErrorCode int `json:"ErrorCode"` // 响应的状态代码 (Yes) |
|
ErrorMessage string `json:"ErrorMessage"` // 响应消息 (Yes) |
|
Url string `json:"Url,omitempty"` // 游戏网址 (No) |
|
} |
|
|
|
func (s *Sub) EnterGame() string { |
|
uid := s.Base.EnterGameReq.UID |
|
// ct := s.Base.EnterGameReq.CurrencyType |
|
gameID := s.Base.EnterGameReq.GameID |
|
// subID := s.Base.EnterGameReq.SubID |
|
gameType := s.Base.GameType |
|
lang := s.Base.EnterGameReq.Lang |
|
providerID := s.Base.EnterGameReq.ProviderID |
|
ip := s.Base.EnterGameReq.IP |
|
cid := s.Base.EnterGameReq.ChannelID |
|
game := new(common.ConfigGameList) |
|
if providerID != 0 && gameID == 0 && gameType != 0 { |
|
// 读取信息 |
|
game.GameType = gameType |
|
} else { |
|
game = call.GetConfigGameListByGameID(providerID, gameID) |
|
if game == nil { |
|
return "" |
|
} |
|
} |
|
currency, err := db.Redis().GetInt(common.GetRedisKeyGameCurrency(uid)) |
|
if err != nil { |
|
log.Error("err:%v", err) |
|
return "" |
|
} |
|
agent := GetAgentByCurrency(common.CurrencyType(currency)) |
|
if agent == nil { |
|
return "" |
|
} |
|
// if !config.GetBase().Release { |
|
// ip = "3.110.154.202" |
|
// } |
|
platForm := 1 |
|
if common.IsPC(s.Base.EnterGameReq.DeviceType) { |
|
platForm = 0 |
|
} |
|
req := &EnterGameReq{ |
|
OperatorCode: agent.OperatorCode, |
|
MemberName: fmt.Sprintf("%d", uid), |
|
// DisplayName: p.Nick, |
|
GameID: game.GameCode, |
|
// ProviderGameType: , |
|
ProductID: ProductIDMap[providerID], |
|
GameType: GameTypeMap[game.GameType], |
|
LanguageCode: LangMap[lang], |
|
Platform: platForm, |
|
IPAddress: ip, |
|
// OperatorLobbyURL: , |
|
RequestTime: time.Now().UTC().Format("20060102150405"), |
|
} |
|
channel := call.GetChannelByID(cid) |
|
if channel != nil && channel.URL != "" { |
|
req.OperatorLobbyURL = "https://" + channel.URL |
|
} |
|
req.Sign = util.CalculateMD5(agent.OperatorCode + req.RequestTime + "launchgame" + agent.SecretKey) |
|
url := API + LaunchGameURL |
|
log.Debug("%d EnterGame:%+v,url:%s", providerID, *req, url) |
|
ret := new(EnterGameResp) |
|
util.HttpPost(url, req, &ret, nil) |
|
log.Debug("%d EnterGame resp:%+v", providerID, ret) |
|
// if str, ok := ret.Data.(string); ok { |
|
// return str |
|
// } |
|
return util.ReplaceHTTPWithHTTPS(ret.Url) |
|
}
|
|
|