PGRData/Script/matrix/xmanager/XMarketingActivityManager.lua

1022 lines
No EOL
42 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.

XMarketingActivityManagerCreator = function()
local tableInsert = table.insert
local tableSort = table.sort
local XMarketingActivityManager = {}
local ActivityList = {}
local CharacterList = {}
local WindowsInlayActivityList = {}
local WindowsInlayTokenList = {}
local PicCompositionCfg = {}
local OtherCompositionDataList = {}
local RankCompositionDataList = {}
local MyCompositionDataList = {}
local PicCompositionUpLoadDayCount = 0
local PicCompositionUpLoadMaxCount = 0
local PicCompositionActivityId = 0
local Json = require("XCommon/Json")
local PicCompositionMemoMax = CS.XGame.ClientConfig:GetInt("PicCompositionMemoMax")
local PicCompositionGetMaxCount = CS.XGame.ClientConfig:GetInt("PicCompositionGetMaxCount")
local PicCompositionBeforStartIndex = 0
local PicCompositionAfterStartIndex = 0
local CurCompositionIndex = 0
local PicCompositionAllCount = 0
local PicCompositionGetedScheduleIds = {}
local PicCompositionLikeList = {}
local PicCompositionRankRewardInfo = {}
local PicCompositionRankResultList = {}
local GetMyCompositionRequest = nil
local GetOtherCompositionRequest = nil
local GetRankDataRequest = nil
local GetTrueWordRequest = nil
local LastSyncRankTimes = 0
local LastSyncTokenTimes = 0
local LastSyncPraiseTimes = 0
local LastSyncMyCompositionTimes = 0
local LastSyncUploadTimes = 0
local LastSyncOtherCompositionTimes = {}
local VoteTokenExpireTime = 0
local SIGNSALT = "YzcmCZNvbXocrsz9dm8e"
local SALTINDEX = 50
local RANKSYNC_SECOND = 10
local PRAISESYNC_SECOND = 2
local UPLOADSYNC_SECOND = 6
local MYDATASYNC_SECOND = 30
local OTHERDATASYNC_SECOND = 30
local TOKENSYNC_SECOND = 40
local ERROR_CODE = {
ActivityId = 10000,
Rank = 10006,
User = 10008,
}
local METHOD_NAME = {
PraiseRequest = "PraiseRequest",
UploadCommentRequest = "UploadCommentRequest",
GetCommentScheduleRewardRequest = "GetCommentScheduleRewardRequest",
MarketVoteTokenRequest = "MarketVoteTokenRequest"
}
local PicComposition_Url = {
GetUser = "/activity/public/user/get?",
GetFavorRank = "/activity/public/favor_rank/get?",
GetTimeRank = "/activity/public/time_rank/get?",
GetArticle = "/activity/public/article/get?",
GetTrueWord = "/web/bad_words/replace?",
}
local TrueWordUrl = {
BaseUrl = "http://47.112.80.27:10010",
}
function XMarketingActivityManager.Init()
ActivityList = XMarketingActivityConfigs.GetMarketingActivityConfig()
CharacterList = XMarketingActivityConfigs.GetCompositionCharacterConfigs()
PicCompositionCfg = XMarketingActivityConfigs.GetPicCompositionConfigs()
PicCompositionRankRewardInfo = XMarketingActivityConfigs.GetPicCompositionRankRewardInfoConfigs()
WindowsInlayActivityList = XMarketingActivityConfigs.GetWindowsInlayActivityConfig()
end
------------------------------看图作文相关---------------------------------->>>
function XMarketingActivityManager.GetActivityList()
local list = {}
if not ActivityList then
return list
end
for _, activity in pairs(ActivityList) do
tableInsert(list, activity)
end
tableSort(list, function(a, b)
return a.Priority > b.Priority
end)
return list
end
function XMarketingActivityManager.GetCharacterList()
local list = {}
if not CharacterList then
return list
end
for _, character in pairs(CharacterList) do
tableInsert(list, character)
end
tableSort(list, function(a, b)
return a.Id < b.Id
end)
return list
end
function XMarketingActivityManager.GetPicCompositionInfo()
return PicCompositionCfg
end
function XMarketingActivityManager.GetPicCompositionMemoMax()
return PicCompositionMemoMax
end
function XMarketingActivityManager.GetPicCompositionGetMaxCount()
return PicCompositionGetMaxCount
end
function XMarketingActivityManager.GetPicCompositionBeforStartIndex()
return PicCompositionBeforStartIndex
end
function XMarketingActivityManager.GetPicCompositionAfterStartIndex()
return PicCompositionAfterStartIndex
end
function XMarketingActivityManager.GetPicCompositionAllCount()
return PicCompositionAllCount
end
function XMarketingActivityManager.GetUpLoadDayCount()
return PicCompositionUpLoadDayCount
end
function XMarketingActivityManager.GetUpLoadMaxCount()
return PicCompositionUpLoadMaxCount
end
function XMarketingActivityManager.GetGetedScheduleIds()
return PicCompositionGetedScheduleIds
end
function XMarketingActivityManager.GetPicCompositionLikeList()
return PicCompositionLikeList
end
function XMarketingActivityManager.GetPicCompositionRankResultList()
return PicCompositionRankResultList
end
function XMarketingActivityManager.GetPicCompositionRankRewardInfoList()
local list = {}
if not PicCompositionRankRewardInfo then
return list
end
for _, info in pairs(PicCompositionRankRewardInfo) do
tableInsert(list, info)
end
return list
end
function XMarketingActivityManager.GetNowActivityId()
return PicCompositionActivityId or 0
end
function XMarketingActivityManager.GetMyCompositionDataListByType(type)
local list = {}
local myCompositionDatalist = MyCompositionDataList[type]
if not myCompositionDatalist then
return list
end
for _, data in pairs(myCompositionDatalist) do
tableInsert(list, data)
end
if type == XMarketingActivityConfigs.CompositionType.Examined then
tableSort(list, function(a, b)
if a.Hot ~= b.Hot then
return a.Hot > b.Hot
else
return a.ReviewTime > b.ReviewTime
end
end)
end
return list
end
function XMarketingActivityManager.GetMyCompositionDataList()
local list = {}
local dialogueData = XMarketingActivityManager.GetMyCompositionDataListByType(
XMarketingActivityConfigs.CompositionType.Examined)
for _, data in pairs(dialogueData) do
tableInsert(list, data)
end
dialogueData = XMarketingActivityManager.GetMyCompositionDataListByType(
XMarketingActivityConfigs.CompositionType.Examining)
for _, data in pairs(dialogueData) do
tableInsert(list, data)
end
dialogueData = XMarketingActivityManager.GetMyCompositionDataListByType(
XMarketingActivityConfigs.CompositionType.UnExamine)
for _, data in pairs(dialogueData) do
tableInsert(list, data)
end
dialogueData = XMarketingActivityManager.GetMyCompositionDataListByType(
XMarketingActivityConfigs.CompositionType.Memo)
for _, data in pairs(dialogueData) do
tableInsert(list, data)
end
return list
end
function XMarketingActivityManager.GetPicCompositionTaskDatas()
if PicCompositionActivityId == 0 then
return nil
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local taskGroupId = infoList[PicCompositionActivityId].LimitTaskId
if taskGroupId == 0 then return {} end
return XDataCenter.TaskManager.GetTimeLimitTaskListByGroupId(taskGroupId)
end
function XMarketingActivityManager.GetOtherCompositionDataList(sortType)
local list = {}
local otherCompositionDataList = OtherCompositionDataList[sortType][CurCompositionIndex]
if not otherCompositionDataList then
return list
end
for _, data in pairs(otherCompositionDataList) do
tableInsert(list, data)
end
return list
end
function XMarketingActivityManager.GetRankCompositionDataList()
local list = {}
if not RankCompositionDataList then
return list
end
for _, data in pairs(RankCompositionDataList) do
tableInsert(list, data)
end
return list
end
function XMarketingActivityManager.GetUpLoadTime(IsInt)
if PicCompositionActivityId == 0 then
return 0, 0
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local uploadBeginTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadBeginTimeStr)
local uploadEndTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadEndTimeStr)
if IsInt then
return uploadBeginTimeStr, uploadEndTimeStr
end
return infoList[PicCompositionActivityId].UploadBeginTimeStr, infoList[PicCompositionActivityId].UploadEndTimeStr
end
function XMarketingActivityManager.GetPicCompositionTime(type)
if PicCompositionActivityId == 0 then
return nil
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local beginTime = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].BeginTimeStr)
local endTime = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].EndTimeStr)
local uploadBeginTime = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadBeginTimeStr)
local uploadEndTime = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadEndTimeStr)
if type == XMarketingActivityConfigs.TimeDataType.BeginTime then
return beginTime
elseif type == XMarketingActivityConfigs.TimeDataType.EndTime then
return endTime
elseif type == XMarketingActivityConfigs.TimeDataType.UploadBeginTime then
return uploadBeginTime
elseif type == XMarketingActivityConfigs.TimeDataType.UploadEndTime then
return uploadEndTime
end
return nil
end
function XMarketingActivityManager.SetNowActivityId(id)
PicCompositionActivityId = id
end
function XMarketingActivityManager.SetGetedScheduleIds(ids)
if not ids then
return
end
for _, id in pairs(ids) do
PicCompositionGetedScheduleIds[id] = id
end
end
function XMarketingActivityManager.AddGetedScheduleIds(id)
PicCompositionGetedScheduleIds[id] = id
end
function XMarketingActivityManager.AddPicCompositionLike(id)
PicCompositionLikeList[id] = id
end
function XMarketingActivityManager.SetPicCompositionRankResultList(list)
PicCompositionRankResultList = list
end
function XMarketingActivityManager.ResetPicCompositionRankResultList()
PicCompositionRankResultList = {}
end
function XMarketingActivityManager.ResetPicCompositionStartIndex()
PicCompositionBeforStartIndex = 0
PicCompositionAfterStartIndex = 0
CurCompositionIndex = 0
end
function XMarketingActivityManager.ClearOtherCompositionDataList(sortType)
OtherCompositionDataList[sortType] = {}
end
function XMarketingActivityManager.CheckIsCanUpLoad()
if PicCompositionActivityId == 0 then
return XMarketingActivityConfigs.TimeType.Out
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local nowTime = XTime.GetServerNowTimestamp()
local beginTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].BeginTimeStr)
local endTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].EndTimeStr)
local uploadBeginTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadBeginTimeStr)
local uploadEndTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].UploadEndTimeStr)
if nowTime > beginTimeStr and nowTime < uploadBeginTimeStr then
return XMarketingActivityConfigs.TimeType.Before
elseif nowTime > uploadBeginTimeStr and nowTime < uploadEndTimeStr then
return XMarketingActivityConfigs.TimeType.In
elseif nowTime > uploadEndTimeStr and nowTime < endTimeStr then
return XMarketingActivityConfigs.TimeType.After
end
return XMarketingActivityConfigs.TimeType.Out
end
function XMarketingActivityManager.CheckIsIntime()
if PicCompositionActivityId == 0 then
return false
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local nowTime = XTime.GetServerNowTimestamp()
local beginTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].BeginTimeStr)
local endTimeStr = XTime.ParseToTimestamp(infoList[PicCompositionActivityId].EndTimeStr)
if nowTime > beginTimeStr and nowTime < endTimeStr then
return true
end
return false
end
function XMarketingActivityManager.CheckAnyTaskFinished()
local taskDatas = XMarketingActivityManager.GetPicCompositionTaskDatas()
if not taskDatas then
return false
end
local achieved = XDataCenter.TaskManager.TaskState.Achieved
for _, taskData in pairs(taskDatas or {}) do
if taskData.State == achieved then
return true
end
end
return false
end
function XMarketingActivityManager.CheckHasActiveTaskReward()
if PicCompositionActivityId == 0 then
return false
end
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local taskItem = infoList[PicCompositionActivityId].ScheduleItemId
local curActivenes = XDataCenter.ItemManager.GetCount(taskItem)
local ActivenesDatas = XMarketingActivityConfigs.GetPicCompositionScheduleRewardInfoConfigs()
for _, activenesData in pairs(ActivenesDatas) do
if activenesData.Schedule <= curActivenes and (not XMarketingActivityManager.IsGetedScheduleReward(activenesData.Id)) then
return true
end
end
return false
end
function XMarketingActivityManager.CheckItemEnough(count)
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
return count >= infoList[PicCompositionActivityId].PraiseConsume
end
function XMarketingActivityManager.IsGetedScheduleReward(id)
if PicCompositionGetedScheduleIds[id] then
return true
end
return false
end
function XMarketingActivityManager.IsDoPicCompositionLike(id)
if PicCompositionLikeList[id] then
return true
end
return false
end
function XMarketingActivityManager.SetMemoDialogue()
MyCompositionDataList[XMarketingActivityConfigs.CompositionType.Memo] = {}
for id = 1, PicCompositionMemoMax do
local dialogue = XSaveTool.GetData(string.format("%d%d%s", XPlayer.Id, id, "PicCompositionMemo"))
if dialogue then
local memo = {}
memo.Type = XMarketingActivityConfigs.CompositionType.Memo
memo.Dialogue = dialogue.Memo
memo.MemoId = id
tableInsert(MyCompositionDataList[memo.Type], memo)
end
end
end
function XMarketingActivityManager.AddMemoDialogue(id, dialogue)
if dialogue then
local memo = {}
memo.Type = XMarketingActivityConfigs.CompositionType.Memo
memo.Dialogue = dialogue
memo.MemoId = id
if not MyCompositionDataList[memo.Type] then
MyCompositionDataList[memo.Type] = {}
end
tableInsert(MyCompositionDataList[memo.Type], memo)
end
end
function XMarketingActivityManager.SaveMemoDialogue(memo, curMemoId, cb)
if PicCompositionActivityId == 0 then
XLog.Error("PicCompositionActivityId Is Error")
return
end
if not curMemoId and #MyCompositionDataList[XMarketingActivityConfigs.CompositionType.Memo] >= PicCompositionMemoMax then
local text = CS.XTextManager.GetText("PicCompositionMemoMax", #MyCompositionDataList[XMarketingActivityConfigs.CompositionType.Memo], PicCompositionMemoMax)
XUiManager.TipMsg(text)
return
end
local memoId = curMemoId and curMemoId or #MyCompositionDataList[XMarketingActivityConfigs.CompositionType.Memo] + 1
local data = {}
data.ActivityId = PicCompositionActivityId
data.Memo = memo
XSaveTool.SaveData(string.format("%d%d%s", XPlayer.Id, memoId, "PicCompositionMemo"), data)
local text
if not curMemoId then
XDataCenter.MarketingActivityManager.AddMemoDialogue(memoId, memo)
text = CS.XTextManager.GetText("PicCompositionSave", memoId, PicCompositionMemoMax)
else
XDataCenter.MarketingActivityManager.SetMemoDialogue()
text = CS.XTextManager.GetText("PicCompositionEdit")
end
XUiManager.TipMsg(text)
if cb then cb() end
end
function XMarketingActivityManager.DelectTimeOverMemoDialogue()
if PicCompositionActivityId == 0 then
return
end
for index = 1, PicCompositionMemoMax do
local data = XSaveTool.GetData(string.format("%d%d%s", XPlayer.Id, index, "PicCompositionMemo"))
if data and data.ActivityId ~= PicCompositionActivityId then
XSaveTool.RemoveData(string.format("%d%d%s", XPlayer.Id, index, "PicCompositionMemo"))
end
end
end
function XMarketingActivityManager.DelectMemoDialogue(index)
if PicCompositionActivityId == 0 then
return
end
if not index then
return
end
if XSaveTool.GetData(string.format("%d%d%s", XPlayer.Id, index, "PicCompositionMemo")) then
XSaveTool.RemoveData(string.format("%d%d%s", XPlayer.Id, index, "PicCompositionMemo"))
end
end
function XMarketingActivityManager.IsCanAutoOpenGuide() --判断是否可以自动打开图文教学
local data = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "PicCompositionGuide"))
if not data then
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "PicCompositionGuide"), true)
return true
end
return false
end
function XMarketingActivityManager.GiveUploadComment(Composition, cb)
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncUploadTimes
if syscTime and now - syscTime < UPLOADSYNC_SECOND then
local text = CS.XTextManager.GetText("PicCompositionfrequencyHint", UPLOADSYNC_SECOND)
XUiManager.TipMsg(text)
return
end
XNetwork.Call(METHOD_NAME.UploadCommentRequest, { CommentInfos = Composition }, function(res)
if res.Code ~= XCode.Success then
if res.ErrorIndex and res.ErrorIndex > 0 then
local text = CS.XTextManager.GetText("PicCompositionErrorText", res.ErrorIndex)
XUiManager.TipMsg(text)
else
XUiManager.TipCode(res.Code)
end
LastSyncUploadTimes = XTime.GetServerNowTimestamp()
return
end
LastSyncUploadTimes = XTime.GetServerNowTimestamp()
XUiManager.TipText("PicCompositionUpLoad")
if cb then cb() end
end)
end
function XMarketingActivityManager.GivePraise(id, cb)
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncPraiseTimes
if syscTime and now - syscTime < PRAISESYNC_SECOND then
local text = CS.XTextManager.GetText("PicCompositionfrequencyHint", PRAISESYNC_SECOND)
XUiManager.TipMsg(text)
return
end
XNetwork.Call(METHOD_NAME.PraiseRequest, { CommentId = id }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XUiManager.TipText("PicCompositionPraise")
XMarketingActivityManager.AddPicCompositionLike(id)
LastSyncPraiseTimes = XTime.GetServerNowTimestamp()
if cb then cb() end
end)
end
function XMarketingActivityManager.GetCommentScheduleReward(id, cb)
XNetwork.Call(METHOD_NAME.GetCommentScheduleRewardRequest, { Id = id }, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
XUiManager.OpenUiObtain(res.RewardGoodsList)
XMarketingActivityManager.AddGetedScheduleIds(id)
XEventManager.DispatchEvent(XEventId.EVENT_TASK_SYNC)
CsXGameEventManager.Instance:Notify(XEventId.EVENT_TASK_SYNC)
if cb then cb() end
end)
end
function XMarketingActivityManager.InitMyCompositionDataList()
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncMyCompositionTimes
if syscTime and now - syscTime < MYDATASYNC_SECOND then
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_MYDATA, true)
return
end
if GetMyCompositionRequest then
return
end
MyCompositionDataList = {}
local url = string.format("%s%s", CS.XRemoteConfig.PicComposition, PicComposition_Url.GetUser)
local activityId = string.format("activityId=%d", PicCompositionActivityId)
local userId = string.format("&userId=%d", XPlayer.Id)
local sign = string.format("&sign=%s", CS.XTool.ToSHA1(string.format("%s%s%s", activityId, userId, SIGNSALT)))
url = string.format("%s%s%s%s", url, activityId, userId, sign)
GetMyCompositionRequest = CS.UnityEngine.Networking.UnityWebRequest.Get(url)
GetMyCompositionRequest.timeout = CS.XGame.Config:GetInt("LoginTimeOutInterval")
CS.XTool.WaitNativeCoroutine(GetMyCompositionRequest:SendWebRequest(), function()
if GetMyCompositionRequest.isNetworkError then
XLog.Error("network errorurl is " .. url .. ", message is " .. GetMyCompositionRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_MYDATA, false)
return
end
if GetMyCompositionRequest.isHttpError then
XLog.Error("http errorurl is " .. url .. ", message is " .. GetMyCompositionRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_MYDATA, false)
return
end
local result = Json.decode(GetMyCompositionRequest.downloadHandler.text)
if result.status ~= 0 then
if result.status == ERROR_CODE.ActivityId then
XLog.Error("ActivityId errorActivityId is " .. PicCompositionActivityId)
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_MYDATA, false)
return
end
GetMyCompositionRequest:Dispose()
GetMyCompositionRequest = nil
PicCompositionUpLoadDayCount = result.data.remainTodayUploadTimes
PicCompositionUpLoadMaxCount = result.data.remainActivityUploadTimes
PicCompositionLikeList = {}
for _, favor in pairs(result.data.favors) do
PicCompositionLikeList[favor] = favor
end
for _, article in pairs(result.data.articles) do
local composition = {}
composition.Id = article.articleId
composition.Type = article.state
composition.ReviewTime = article.reviewTimeStamp
composition.Dialogue = Json.decode(article.content)
composition.Hot = article.scores
if not MyCompositionDataList[composition.Type] then
MyCompositionDataList[composition.Type] = {}
end
tableInsert(MyCompositionDataList[composition.Type], composition)
end
LastSyncMyCompositionTimes = XTime.GetServerNowTimestamp()
XMarketingActivityManager.SetMemoDialogue()
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_MYDATA, true)
end)
end
function XMarketingActivityManager.InitOtherCompositionDataList(sortType, getType)
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncOtherCompositionTimes[sortType]
if not syscTime or now - syscTime > OTHERDATASYNC_SECOND then
XMarketingActivityManager.ClearOtherCompositionDataList(sortType)
end
local url
if sortType == XMarketingActivityConfigs.SortType.Hot then
url = string.format("%s%s", CS.XRemoteConfig.PicComposition, PicComposition_Url.GetFavorRank)
else
url = string.format("%s%s", CS.XRemoteConfig.PicComposition, PicComposition_Url.GetTimeRank)
end
if getType == XMarketingActivityConfigs.GetType.Before then
PicCompositionBeforStartIndex = (PicCompositionBeforStartIndex - PicCompositionGetMaxCount) > 0 and
(PicCompositionBeforStartIndex - PicCompositionGetMaxCount) or 0
PicCompositionAfterStartIndex = PicCompositionBeforStartIndex + PicCompositionGetMaxCount
end
CurCompositionIndex = getType == XMarketingActivityConfigs.GetType.Before and
CurCompositionIndex - 1 or CurCompositionIndex + 1
if not OtherCompositionDataList[sortType][CurCompositionIndex] then
OtherCompositionDataList[sortType][CurCompositionIndex] = {}
else
if getType == XMarketingActivityConfigs.GetType.After then
PicCompositionAfterStartIndex = PicCompositionAfterStartIndex + PicCompositionGetMaxCount
PicCompositionBeforStartIndex = PicCompositionAfterStartIndex - PicCompositionGetMaxCount
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_OTHERDATA, true, getType)
return
end
local activityId = string.format("activityId=%d", PicCompositionActivityId)
local index = getType == XMarketingActivityConfigs.GetType.Before and PicCompositionBeforStartIndex or PicCompositionAfterStartIndex
local startStr = string.format("&start=%d", index)
local lengthStr = string.format("&length=%d", PicCompositionGetMaxCount)
local sign = string.format("&sign=%s", CS.XTool.ToSHA1(string.format("%s%s%s%s", activityId, startStr, lengthStr, SIGNSALT)))
url = string.format("%s%s%s%s%s", url, activityId, startStr, lengthStr, sign)
if GetOtherCompositionRequest then
GetOtherCompositionRequest:Dispose()
end
GetOtherCompositionRequest = CS.UnityEngine.Networking.UnityWebRequest.Get(url)
GetOtherCompositionRequest.timeout = CS.XGame.Config:GetInt("LoginTimeOutInterval")
CS.XTool.WaitNativeCoroutine(GetOtherCompositionRequest:SendWebRequest(), function()
if GetOtherCompositionRequest.isNetworkError then
XLog.Error("network errorurl is " .. url .. ", message is " .. GetOtherCompositionRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_OTHERDATA, false, getType)
return
end
if GetOtherCompositionRequest.isHttpError then
XLog.Error("http errorurl is " .. url .. ", message is " .. GetOtherCompositionRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_OTHERDATA, false, getType)
return
end
local ok, result = pcall(Json.decode, GetOtherCompositionRequest.downloadHandler.text)
if not ok then
return
end
if result.status ~= 0 then
if result.status == ERROR_CODE.ActivityId then
XLog.Error("ActivityId errorActivityId is " .. PicCompositionActivityId)
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_OTHERDATA, false, getType)
return
end
GetOtherCompositionRequest:Dispose()
GetOtherCompositionRequest = nil
PicCompositionAllCount = result.data.total
if getType == XMarketingActivityConfigs.GetType.After then
PicCompositionAfterStartIndex = PicCompositionAfterStartIndex + PicCompositionGetMaxCount
PicCompositionBeforStartIndex = PicCompositionAfterStartIndex - PicCompositionGetMaxCount
end
for _, article in pairs(result.data.articles) do
local composition = {}
composition.Id = article.articleId
composition.Type = article.state
composition.UserName = article.userName
composition.ReviewTime = article.reviewTimeStamp
composition.Dialogue = Json.decode(article.content)
composition.UserId = tonumber(article.userId)
composition.Hot = article.scores
tableInsert(OtherCompositionDataList[sortType][CurCompositionIndex], composition)
end
local indexOffset = 2
if OtherCompositionDataList[sortType][CurCompositionIndex + indexOffset] then
OtherCompositionDataList[sortType][CurCompositionIndex + indexOffset] = nil
end
if OtherCompositionDataList[sortType][CurCompositionIndex - indexOffset] then
OtherCompositionDataList[sortType][CurCompositionIndex - indexOffset] = nil
end
LastSyncOtherCompositionTimes[sortType] = XTime.GetServerNowTimestamp()
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_OTHERDATA, true, getType)
end)
end
function XMarketingActivityManager.InitRankCompositionDataList()
local now = XTime.GetServerNowTimestamp()
local syscTime = LastSyncRankTimes
if syscTime and now - syscTime < RANKSYNC_SECOND then
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_RANKDATA, true)
return
end
if GetRankDataRequest then
return
end
RankCompositionDataList = {}
local infoList = XMarketingActivityConfigs.GetPicCompositionActivityInfoConfigs()
local rankNum = infoList[PicCompositionActivityId] and
infoList[PicCompositionActivityId].RankNum or nil
local url = string.format("%s%s", CS.XRemoteConfig.PicComposition, PicComposition_Url.GetFavorRank)
local activityId = string.format("activityId=%d", PicCompositionActivityId)
local startStr = string.format("&start=%d", 0)
local lengthStr = string.format("&length=%d", rankNum)
local sign = string.format("&sign=%s", CS.XTool.ToSHA1(string.format("%s%s%s%s", activityId, startStr, lengthStr, SIGNSALT)))
url = string.format("%s%s%s%s%s", url, activityId, startStr, lengthStr, sign)
GetRankDataRequest = CS.UnityEngine.Networking.UnityWebRequest.Get(url)
GetRankDataRequest.timeout = CS.XGame.Config:GetInt("LoginTimeOutInterval")
CS.XTool.WaitNativeCoroutine(GetRankDataRequest:SendWebRequest(), function()
if GetRankDataRequest.isNetworkError then
XLog.Error("network errorurl is " .. url .. ", message is " .. GetRankDataRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_RANKDATA, false)
return
end
if GetRankDataRequest.isHttpError then
XLog.Error("http errorurl is " .. url .. ", message is " .. GetRankDataRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_RANKDATA, false)
return
end
local result = Json.decode(GetRankDataRequest.downloadHandler.text)
if result.status ~= 0 then
if result.status == ERROR_CODE.ActivityId then
XLog.Error("ActivityId errorActivityId is " .. PicCompositionActivityId)
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_RANKDATA, false)
return
end
GetRankDataRequest:Dispose()
GetRankDataRequest = nil
for _, article in pairs(result.data.articles) do
local composition = {}
composition.Id = article.articleId
composition.Type = article.state
composition.UserName = article.userName
composition.ReviewTime = article.reviewTimeStamp
composition.Dialogue = Json.decode(article.content)
composition.Hot = article.scores
composition.HeadPortraitId = tonumber(article.profileId)
composition.HeadFrameId = tonumber(article.headFrameId)
composition.UserId = tonumber(article.userId)
tableInsert(RankCompositionDataList, composition)
end
LastSyncRankTimes = XTime.GetServerNowTimestamp()
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_RANKDATA, true)
end)
end
function XMarketingActivityManager.GetTrueWord(dialogueText, haveBadWordCb, notHaveBadWordCb, index)
local url = string.format("%s%s", TrueWordUrl.BaseUrl, PicComposition_Url.GetTrueWord)
--local enCodeText = CS.System.Net.WebUtility.UrlEncode(dialogueText)
local content = string.format("content=%s", dialogueText)
url = string.format("%s%s", url, content)
if GetTrueWordRequest then
GetTrueWordRequest:Dispose()
end
GetTrueWordRequest = CS.UnityEngine.Networking.UnityWebRequest.Get(url)
GetTrueWordRequest.timeout = CS.XGame.Config:GetInt("LoginTimeOutInterval")
CS.XTool.WaitNativeCoroutine(GetTrueWordRequest:SendWebRequest(), function()
if GetTrueWordRequest.isNetworkError then
XLog.Error("network errorurl is " .. url .. ", message is " .. GetTrueWordRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_WORD, false, nil, index)
return
end
if GetTrueWordRequest.isHttpError then
XLog.Error("http errorurl is " .. url .. ", message is " .. GetTrueWordRequest.error)
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_WORD, false, nil, index)
return
end
local ok, result = pcall(Json.decode, GetTrueWordRequest.downloadHandler.text)
if not ok then
return
end
if result.status ~= 0 then
if result.status == ERROR_CODE.ActivityId then
XLog.Error("ActivityId errorActivityId is " .. PicCompositionActivityId)
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_WORD, false, nil, index)
return
end
GetTrueWordRequest:Dispose()
GetTrueWordRequest = nil
local containBadWords = result.data.containBadWords
local dataContent = result.data.content
if containBadWords then
if haveBadWordCb then haveBadWordCb() end
else
if notHaveBadWordCb then notHaveBadWordCb() end
end
XEventManager.DispatchEvent(XEventId.EVENT_PICCOMPOSITION_GET_WORD, true, dataContent, index)
end)
end
------------------------------看图作文相关----------------------------------<<<
------------------------------内嵌浏览器相关---------------------------------->>>
function XMarketingActivityManager.GetWindowsInlayActivityList()
local list = {}
for _, activity in pairs(WindowsInlayActivityList) do
tableInsert(list, activity)
end
tableSort(list, function(a, b)
return a.Priority > b.Priority
end)
return list
end
function XMarketingActivityManager.GetWindowsInlayInTimeActivityList()
local list = {}
for _, activity in pairs(WindowsInlayActivityList) do
local IsInTime = XMarketingActivityManager.CheckWindowsInlayActivityIsInTime(activity)
if IsInTime then
tableInsert(list, activity)
end
end
tableSort(list, function(a, b)
return a.Priority > b.Priority
end)
return list
end
function XMarketingActivityManager.GetWindowsInlayActivityById(id)
return WindowsInlayActivityList[id]
end
function XMarketingActivityManager.GetWindowsInlayTokenByType(type)
return WindowsInlayTokenList[type]
end
function XMarketingActivityManager.SetWindowsInlayToken(token,type)
WindowsInlayTokenList[type] = token
end
function XMarketingActivityManager.CheckWindowsInlayActivityIsInTime(windowsInlayActivity)
if not windowsInlayActivity then
return false
end
local nowTime = XTime.GetServerNowTimestamp()
local beginTimeStr = XTime.ParseToTimestamp(windowsInlayActivity.BeginTimeStr)
local endTimeStr = XTime.ParseToTimestamp(windowsInlayActivity.EndTimeStr)
return not beginTimeStr or (nowTime > beginTimeStr and nowTime < endTimeStr)
end
function XMarketingActivityManager.IsShowWindowsInlayRedPoint()
local freshTime = XTime.GetSeverTodayFreshTime()
local data = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "WindowsInlayRedPoint"))
if data then
if freshTime > data then
return true
else
return false
end
else
return true
end
end
function XMarketingActivityManager.GetSignUrl(Url)
local urlData = {}
local keyList = {
"roleId",
"serverId",
"time",
"deviceNumber",
}
urlData["roleId"] = string.format("roleId=%d", XPlayer.Id)
urlData["serverId"] = string.format("serverId=%s", CS.XHeroBdcAgent.ServerId)
urlData["time"] = string.format("time=%d", XTime.GetServerNowTimestamp())
urlData["deviceNumber"] = string.format("deviceNumber=%s", CS.UnityEngine.SystemInfo.deviceUniqueIdentifier)
table.sort(keyList,function (a, b)
return string.byte(a) < string.byte(b)
end)
local tmpUrl = string.format("%s&%s&%s&%s", urlData[keyList[1]], urlData[keyList[2]], urlData[keyList[3]], urlData[keyList[4]])
local saltUrl = XMarketingActivityManager.AddSalt(tmpUrl)
local sign = string.format("&sign=%s", CS.XTool.ToSHA1(saltUrl))
local url = string.format("%s?%s%s", Url, tmpUrl, sign)
return url
end
function XMarketingActivityManager.AddSalt(Url)
local strLen = string.len(Url)
local tagStr = Url
if strLen <= SALTINDEX then
tagStr = string.format("%s%s", tagStr, SIGNSALT)
else
local exStr = string.sub(tagStr, 1, SALTINDEX)
local afStr = string.sub(tagStr, SALTINDEX + 1)
tagStr = string.format("%s%s%s", exStr, SIGNSALT, afStr)
end
return tagStr
end
function XMarketingActivityManager.MarkWindowsInlayRedPoint()
local freshTime = XTime.GetSeverTodayFreshTime()
local data = XSaveTool.GetData(string.format("%d%s", XPlayer.Id, "WindowsInlayRedPoint"))
if data then
if freshTime > data then
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "WindowsInlayRedPoint"), freshTime)
end
else
XSaveTool.SaveData(string.format("%d%s", XPlayer.Id, "WindowsInlayRedPoint"), freshTime)
end
end
function XMarketingActivityManager.RequestVoteToken(type, cb)
local now = XTime.GetServerNowTimestamp()
if now < VoteTokenExpireTime then --根据token的保质期来判断是否需要重新请求
if cb then cb() end
return
end
XNetwork.Call(METHOD_NAME.MarketVoteTokenRequest, {}, function(res)
if res.Code ~= XCode.Success then
XUiManager.TipCode(res.Code)
return
end
VoteTokenExpireTime = res.ExpireTime--Token的过期时间
XMarketingActivityManager.SetWindowsInlayToken(res.Token,type)
if cb then cb() end
end)
end
------------------------------内嵌浏览器相关----------------------------------<<<
XMarketingActivityManager.Init()
return XMarketingActivityManager
end
XRpc.NotifyCommentRankResult = function(data)
XDataCenter.MarketingActivityManager.SetPicCompositionRankResultList(data)
end
XRpc.NotifyProductCommentData = function(data)
XDataCenter.MarketingActivityManager.SetNowActivityId(data.Id)
XDataCenter.MarketingActivityManager.SetGetedScheduleIds(data.ScheduleIds)
end