PGRData/Resources/Scripts/XManager/XHeroSdkManager.lua
2022-12-26 14:06:01 +05:30

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