local OnlineReward_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local fun_activity_pb = require('Proto.fun_activity_pb') local TotalOnlineRewardProgress = DataSheetManager.OnlineDialDrawTime:GetDataCount() function OnlineReward_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageStartReward, private.StartRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessageStartReceiveReward, private.StartReceiveRewardResp) private.rewardCount = 0 --领奖次数 private.passTime = 0 --服务器发送的累计在线时间 private.rewardList = {} --奖励信息列表 for i = 1, TotalOnlineRewardProgress do private.rewardList[i] = 0 end private.OnlineTimeStamp = 0 --客户端累积本次在线时间的开始时间戳 end --region 数据相关 function OnlineReward_Model.GetRewardList() return private.rewardList end function OnlineReward_Model.GetRewardCount() return private.rewardCount end ---获取可领取下次奖励的剩余时间 function OnlineReward_Model.GetLeftTime() if private.rewardCount < TotalOnlineRewardProgress then local waitTime = DataSheetManager.OnlineDialDrawTime:GetDataByDrawID(private.rewardCount + 1).Time --表里配置的总等待时间 local onlineTime = UTL.Time.GetServerTimestamp() - private.OnlineTimeStamp --本次登陆客户端的在线时长 return math.max(waitTime - private.passTime - onlineTime, 0) --总等待时间 - 服务器累计在线时间 - 本次客户端登陆的在线时间 = 剩余时间 end return 0 end function private.SetOnlinePassTime(time) private.passTime = time or 0 private.OnlineTimeStamp = UTL.Time.GetServerTimestamp() CTL.OnlineReward.OnlineRewardCountDown() end function OnlineReward_Model.SetOnlineRewardInfo(info) logging.log(LTAG.LOG, "在线奖励信息推送:", info) private.rewardCount = info.rewardCnt or 0 private.SetOnlinePassTime(info.totalTime) for i, v in ipairs(info.rewardInfo) do private.rewardList[i] = v end EventSystem.Dispatch(EventID.UI_OnlineReward_Refresh) end --endregion --region 协议相关 function OnlineReward_Model.StartRewardReq() local msg = fun_activity_pb.StartRewardReq() NetManager.SendMessage(MessageEnums.MessageStartReward, msg) end function private.StartRewardResp(msgResp) if msgResp.Resp.Code == 0 then ---这块属于客户端的处理,目的是在 “因故导致只发送了抽奖协议而没有发送领奖协议” 的时候显示正常。 private.rewardCount = private.rewardCount + 1 private.SetOnlinePassTime() EventSystem.Dispatch(EventID.UI_OnlineReward_Start, msgResp.orderId) --正常时间派发,相应开始抽奖动画 EventSystem.Dispatch(EventID.UI_OnlineReward_Refresh) --这个要在后面是为了防止面板刷新过早导致按钮的状态不对 EventSystem.Dispatch(EventID.UI_WelfareBase_RefreshRedPoint) end end function OnlineReward_Model.StartReceiveRewardReq() local msg = fun_activity_pb.StartReceiveRewardReq() NetManager.SendMessage(MessageEnums.MessageStartReceiveReward, msg) end function private.StartReceiveRewardResp(msgResp) end --endregion function OnlineReward_Model.OnShutdown() end return OnlineReward_Model