291 lines
No EOL
8.4 KiB
Lua
291 lines
No EOL
8.4 KiB
Lua
XHeroSdkManager = XHeroSdkManager or {}
|
|
|
|
local Json = require("XCommon/Json")
|
|
|
|
local Application = CS.UnityEngine.Application
|
|
local Platform = Application.platform
|
|
local RuntimePlatform = CS.UnityEngine.RuntimePlatform
|
|
|
|
local IsSdkLogined = false
|
|
local LogoutSccess = 0
|
|
local LogoutFailed = 1
|
|
local LogoutCb = nil
|
|
local LastTimeOfCallSdkLoginUi = 0
|
|
local CallLoginUiCountDown = 2
|
|
local HeroRoleInfo = CS.XHeroRoleInfo
|
|
local HeroOrderInfo = CS.XHeroOrderInfo
|
|
local PayCallbacks = {} -- android 充值回调
|
|
local IOSPayCallback = nil -- iOS 充值回调
|
|
local HasSdkLoginError = false -- sdk登陆存在错误
|
|
--local CallbackUrl = "http://haru.free.idcfengye.com/api/XPay/HeroPayResult"
|
|
local CallbackUrl = CS.XRemoteConfig.PayCallbackUrl
|
|
local XRecordUserInfo = CS.XRecord.XRecordUserInfo
|
|
|
|
local CleanPayCallbacks = function()
|
|
PayCallbacks = {}
|
|
IOSPayCallback = nil
|
|
end
|
|
|
|
function XHeroSdkManager.IsNeedLogin()
|
|
return not (CS.XHeroSdkAgent.IsLogined() and IsSdkLogined)
|
|
end
|
|
|
|
function XHeroSdkManager.HasLoginError()
|
|
return HasSdkLoginError
|
|
end
|
|
|
|
function XHeroSdkManager.Login()
|
|
if not XHeroSdkManager.IsNeedLogin() then
|
|
CS.XRecord.Record("24035", "HeroSdkRepetitionLogin")
|
|
return
|
|
end
|
|
|
|
local curTime = CS.UnityEngine.Time.realtimeSinceStartup
|
|
if curTime - LastTimeOfCallSdkLoginUi < CallLoginUiCountDown then
|
|
CS.XRecord.Record("24036", "HeroSdkShortTimeLogin")
|
|
return
|
|
end
|
|
LastTimeOfCallSdkLoginUi = curTime
|
|
|
|
HasSdkLoginError = false
|
|
CS.XRecord.Record("24023", "HeroSdkLogin")
|
|
CS.XHeroSdkAgent.Login()
|
|
end
|
|
|
|
function XHeroSdkManager.Logout(cb)
|
|
if XHeroSdkManager.IsNeedLogin() then
|
|
if cb then
|
|
cb(LogoutFailed)
|
|
end
|
|
return
|
|
end
|
|
|
|
LogoutCb = cb
|
|
CS.XRecord.Record("24029", "HeroSdkLogout")
|
|
CS.XHeroSdkAgent.Logout()
|
|
|
|
if Platform == RuntimePlatform.IPhonePlayer then
|
|
-- iOS 无回调,直接调用退出
|
|
XHeroSdkManager.OnLogoutSuccess()
|
|
end
|
|
end
|
|
|
|
function XHeroSdkManager.OnLoginSuccess(uid, username, token)
|
|
if IsSdkLogined and XUserManager.UserId ~= uid then
|
|
XLog.Error("重复的登陆成功回调 user_id1:" .. tostring(XUserManager.UserId) .. ", user_id2:" .. tostring(uid))
|
|
HasSdkLoginError = true
|
|
end
|
|
IsSdkLogined = true
|
|
LastTimeOfCallSdkLoginUi = 0
|
|
local info = XRecordUserInfo()
|
|
info.UserId = uid
|
|
info.UserName = username
|
|
CS.XRecord.Login(info)
|
|
CS.XRecord.Record("24024", "HeroSdkLoginSuccess")
|
|
CleanPayCallbacks()
|
|
XUserManager.SetUserId(uid)
|
|
XUserManager.SetUserName(username)
|
|
XUserManager.SetToken(token)
|
|
end
|
|
|
|
function XHeroSdkManager.OnLoginFailed(msg)
|
|
XLog.Error("Hero sdk login failed. " .. msg)
|
|
IsSdkLogined = false
|
|
CS.XRecord.Record("24032", "HeroSdkLoginFailed")
|
|
|
|
LastTimeOfCallSdkLoginUi = 0
|
|
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), CS.XTextManager.GetText("HeroSdkLoginFailed"), XUiManager.DialogType.OnlySure, nil, function()
|
|
XHeroSdkManager.Login()
|
|
end)
|
|
end
|
|
|
|
function XHeroSdkManager.OnLoginCancel()
|
|
IsSdkLogined = false
|
|
LastTimeOfCallSdkLoginUi = 0
|
|
-- CS.XRecord.Record("24032", "HeroSdkLoginFailed")
|
|
end
|
|
|
|
function XHeroSdkManager.OnSwitchAccountSuccess(uid, username, token)
|
|
local info = XRecordUserInfo()
|
|
info.UserId = uid
|
|
info.UserName = username
|
|
CS.XRecord.Login(info)
|
|
CS.XRecord.Record("24025", "HeroSdkSwitchAccountSuccess")
|
|
CleanPayCallbacks()
|
|
XUserManager.OnSwitchAccountSuccess(uid, username, token)
|
|
end
|
|
|
|
function XHeroSdkManager.OnSwitchAccountFailed(msg)
|
|
CS.XRecord.Record("24026", "HeroSdkSwitchAccountFailed")
|
|
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, nil)
|
|
end
|
|
|
|
function XHeroSdkManager.OnSwitchAccountCancel()
|
|
--TODO
|
|
end
|
|
|
|
function XHeroSdkManager.OnLogoutSuccess()
|
|
IsSdkLogined = false
|
|
CS.XRecord.Record("24027", "HeroSdkLogoutSuccess")
|
|
CS.XRecord.Logout()
|
|
CleanPayCallbacks()
|
|
XUserManager.SignOut()
|
|
|
|
if LogoutCb then
|
|
LogoutCb(LogoutSccess)
|
|
LogoutCb = nil
|
|
end
|
|
end
|
|
|
|
function XHeroSdkManager.OnLogoutFailed(msg)
|
|
IsSdkLogined = true
|
|
CS.XRecord.Record("24028", "HeroSdkLogoutFailed")
|
|
XUiManager.SystemDialogTip(CS.XTextManager.GetText("TipTitle"), msg, XUiManager.DialogType.OnlySure, nil, nil)
|
|
|
|
if LogoutCb then
|
|
LogoutCb(LogoutFailed)
|
|
LogoutCb = nil
|
|
end
|
|
end
|
|
|
|
function XHeroSdkManager.OnSdkKickOff(msg)
|
|
XLog.Debug("XHeroSdkManager.OnSdkKickOff() msg = " .. msg)
|
|
XDataCenter.AntiAddictionManager.Kick(msg)
|
|
end
|
|
|
|
local GetRoleInfo = function()
|
|
local roleInfo = HeroRoleInfo()
|
|
roleInfo.Id = XPlayer.Id
|
|
roleInfo.ServerId = XServerManager.Id
|
|
roleInfo.ServerName = XServerManager.ServerName
|
|
roleInfo.Name = XPlayer.Name
|
|
roleInfo.Level = XPlayer.Level
|
|
roleInfo.CreateTime = XPlayer.CreateTime
|
|
roleInfo.PaidGem = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.PaidGem)
|
|
roleInfo.Coin = XDataCenter.ItemManager.GetCount(XDataCenter.ItemManager.ItemId.Coin)
|
|
roleInfo.SumPay = 0
|
|
roleInfo.VipLevel = 0
|
|
roleInfo.PartyName = nil
|
|
|
|
return roleInfo
|
|
end
|
|
|
|
function XHeroSdkManager.EnterGame()
|
|
if XUserManager.Channel ~= XUserManager.CHANNEL.HERO then
|
|
return
|
|
end
|
|
CS.XHeroSdkAgent.EnterGame(GetRoleInfo())
|
|
end
|
|
|
|
function XHeroSdkManager.CreateNewRole()
|
|
if XUserManager.Channel ~= XUserManager.CHANNEL.HERO then
|
|
return
|
|
end
|
|
CS.XHeroSdkAgent.CreateNewRole(GetRoleInfo())
|
|
end
|
|
|
|
function XHeroSdkManager.RoleLevelUp()
|
|
if XUserManager.Channel ~= XUserManager.CHANNEL.HERO then
|
|
return
|
|
end
|
|
CS.XHeroSdkAgent.RoleLevelUp(GetRoleInfo())
|
|
end
|
|
|
|
local GetOrderInfo = function(cpOrderId, goodsId, extraParams)
|
|
local orderInfo = HeroOrderInfo()
|
|
orderInfo.CpOrderId = cpOrderId
|
|
orderInfo.GoodsId = goodsId
|
|
|
|
if extraParams and _G.next(extraParams) then
|
|
orderInfo.ExtraParams = Json.encode(extraParams)
|
|
end
|
|
|
|
-- if productInfo.GoodsName and #productInfo.GoodsName > 0 then
|
|
-- orderInfo.GoodsName = productInfo.GoodsName
|
|
-- end
|
|
-- if productInfo.GoodsDesc and #productInfo.GoodsDesc > 0 then
|
|
-- orderInfo.GoodsDesc = productInfo.GoodsDesc
|
|
-- end
|
|
-- if productInfo.Amount and productInfo.Amount > 0 then
|
|
-- orderInfo.Amount = productInfo.Amount
|
|
-- end
|
|
-- if productInfo.Price and productInfo.Price > 0 then
|
|
-- orderInfo.Price = productInfo.Price
|
|
-- end
|
|
-- if productInfo.Count and productInfo.Count > 0 then
|
|
-- orderInfo.Count = productInfo.Count
|
|
-- end
|
|
if CallbackUrl then
|
|
orderInfo.CallbackUrl = CallbackUrl
|
|
end
|
|
|
|
return orderInfo
|
|
end
|
|
|
|
function XHeroSdkManager.Pay(productKey, cpOrderId, goodsId, cb)
|
|
-- local extraParams = {
|
|
-- PlayerId = XPlayer.Id,
|
|
-- ProductKey = productKey,
|
|
-- CpOrderId = cpOrderId,
|
|
-- ProductId = productInfo.ProductId
|
|
-- }
|
|
if Platform == RuntimePlatform.Android then
|
|
PayCallbacks[cpOrderId] = {
|
|
cb = cb,
|
|
info = {
|
|
ProductKey = productKey,
|
|
CpOrderId = cpOrderId,
|
|
GoodsId = goodsId,
|
|
PlayerId = XPlayer.Id
|
|
}
|
|
}
|
|
end
|
|
|
|
local order = GetOrderInfo(cpOrderId, goodsId)
|
|
CS.XHeroSdkAgent.Pay(order, GetRoleInfo())
|
|
XDataCenter.AntiAddictionManager.BeginPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.OnPayAndSuccess(sdkOrderId, cpOrderId)
|
|
local cbInfo = PayCallbacks[cpOrderId]
|
|
if cbInfo and cbInfo.cb then
|
|
cbInfo.info.sdkOrderId = sdkOrderId
|
|
cbInfo.cb(nil, cbInfo.info)
|
|
end
|
|
|
|
PayCallbacks[cpOrderId] = nil
|
|
XDataCenter.AntiAddictionManager.EndPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.OnPayAndFailed(cpOrderId, msg)
|
|
local cbInfo = PayCallbacks[cpOrderId]
|
|
if cbInfo and cbInfo.cb then
|
|
cbInfo.cb(msg, cbInfo.info)
|
|
end
|
|
|
|
PayCallbacks[cpOrderId] = nil
|
|
XDataCenter.AntiAddictionManager.EndPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.OnPayAndCancel(cpOrderId)
|
|
PayCallbacks[cpOrderId] = nil
|
|
XDataCenter.AntiAddictionManager.EndPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.OnPayIOSSuccess(orderId)
|
|
if IOSPayCallback then
|
|
IOSPayCallback(nil, orderId)
|
|
end
|
|
XDataCenter.AntiAddictionManager.EndPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.OnPayIOSFailed(msg)
|
|
if IOSPayCallback then
|
|
IOSPayCallback(msg)
|
|
end
|
|
XDataCenter.AntiAddictionManager.EndPayAction()
|
|
end
|
|
|
|
function XHeroSdkManager.RegisterIOSCallback(cb)
|
|
IOSPayCallback = cb
|
|
end |