PGRData/Script/matrix/xmanager/XVoteManager.lua

152 lines
No EOL
4.3 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

XVoteManagerCreator = function()
local XVoteManager = {}
---key: voteId
---value: { voteNum: 投票数, group: 这个投票属于哪个 投票分组 }
local VoteMap = {}
--key: groupId(投票分组Id)
--value: { groupId: 分组Id, TimeToClose: 分组关闭时间, VoteMap: 分组包括的投票Id }
local GroupMap
--- {Id: 分组IdSelectId选择投票Id}
local VoteGroupInfo = {}
local METHOD_NAME = {
GetVoteGroupListRequest = "GetVoteGroupListRequest",
AddVoteRequest = "AddVoteRequest",
}
function XVoteManager.GetVoteGroupListRequest(cb)
XNetwork.Call(METHOD_NAME.GetVoteGroupListRequest, {}, function(res)
VoteMap = {}
GroupMap = {}
local groupList = res.VoteGroupList
for _, v in pairs(groupList) do
local groupItem = {}
groupItem.GroupId = v.Id
groupItem.TimeToClose = v.TimeToClose
groupItem.VoteMap = {}
for voteId, voteNum in pairs(v.VoteDic) do
VoteMap[voteId] = {}
VoteMap[voteId].VoteNum = voteNum
VoteMap[voteId].GroupId = v.Id
table.insert(groupItem.VoteMap, voteId)
end
GroupMap[v.Id] = groupItem
end
XEventManager.DispatchEvent(XEventId.EVENT_VOTE_REFRESH)
if cb then
cb()
end
end)
end
function XVoteManager.AddVote(voteId, cb)
if not VoteMap[voteId] then
XLog.Error(" XVoteManager.AddVote VoteId is not exist " .. voteId)
return
end
XNetwork.Call(METHOD_NAME.AddVoteRequest, { VoteId = voteId }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
VoteMap[voteId].VoteNum = VoteMap[voteId].VoteNum + 1
XEventManager.DispatchEvent(XEventId.EVENT_VOTE_REFRESH)
if cb then
cb()
end
end)
end
--判断是否已经从后端拿到 投票数据
function XVoteManager.IsInit()
return not (GroupMap == nil)
end
--判断投票是否已经关闭
function XVoteManager.IsGroupVoteClose(groupId)
if GroupMap == nil then
return true
else
local groupMo = GroupMap[groupId]
if not groupMo then
XLog.Error(" XVoteManager.IsGroupVoteClose is not exist " .. groupId)
return true
end
local remainTime = groupMo.TimeToClose - XTime.GetServerNowTimestamp()
if remainTime > 0 then
return false
else
return true
end
end
end
--判断是否已经投过票
function XVoteManager.IsGroupVoted(groupId)
if not VoteGroupInfo[groupId] then
return false
else
return true
end
end
function XVoteManager.IsVoteSelected(groupId,voteId)
local info = VoteGroupInfo[groupId]
if not info then
return false
end
if info.SelectId ~= voteId then
return false
end
return true
end
--根据 VoteId 得到投票数据
--如果已经请求过后端数据直接return voteMo
function XVoteManager.GetVote(voteId)
if GroupMap == nil then
return
else
local voteMo = VoteMap[voteId]
if not voteMo then
XLog.Error(" XVoteManager.GetVote voteId is not exist " .. voteId)
return
end
return voteMo
end
end
function XVoteManager.RefreshGroupInfo(groupData)
VoteGroupInfo = {}
for _, v in pairs(groupData) do
VoteGroupInfo[v.Id] = v
end
end
function XVoteManager.GetVoteIdListByGroupId(groupId)
local group = GroupMap[groupId]
if not group then
XLog.Error("XVoteManager.GetVoteIdListByGroupId error. group id is not exist. groupId = " .. groupId)
return {}
end
return group.VoteMap
end
return XVoteManager
end
XRpc.NotifyVoteData = function(data)
XDataCenter.VoteManager.RefreshGroupInfo(data.VoteAlarmDic)
end