PGRData/Script/matrix/xmanager/XPersonalInfoManager.lua

354 lines
No EOL
12 KiB
Lua

XPersonalInfoManagerCreator = function()
local XPersonalInfoManager = {}
-- local PanelPersonalInfo = nil
local DailyItemsPools = {}--自己日记item缓存池
local OtherDailyItemsPools = {}--其它人日记item缓存池
local DailyServerDataPools = {} --服务器数据缓存池
local DailyDict = {}
local PlayerId = nil
local LeaveMsgs = {}
XPersonalInfoManager.ItemPanelType = {
NorDaily = 1,
DailyleaveMsg = 2,
}
XPersonalInfoManager.OpenViewType = {
Personal = 1,
Social = 2,
}
local showLog = false
function XPersonalInfoManager.DebugLog(...)
if showLog then
XLog.Error(...)
end
end
function XPersonalInfoManager.Init()
end
function XPersonalInfoManager.ReqShowInfoPanel(id, loadCompleteCB, closeCB, chatContent, openViewCb)--查看个人信息
if id == XPlayer.Id then
if loadCompleteCB then
loadCompleteCB()
end
XLuaUiManager.Open("UiPlayer", closeCB)
return
end
--查看个人信息
XDataCenter.PlayerInfoManager.RequestPlayerInfoData(id, function(data)
if openViewCb then
openViewCb(data)
else
XLuaUiManager.Open("UiPlayerInfo", data, chatContent)
end
if loadCompleteCB then
loadCompleteCB()
end
end)
end
--日记模块
function XPersonalInfoManager.RefreshLeaveMsgData(id, pageNum, cb)
if PlayerId ~= nil then
XPersonalInfoManager.LookOverLeaveMsg(id, pageNum, cb)
end
end
function XPersonalInfoManager.RefreshDailyData(pageNum, cb)
if PlayerId ~= nil then
XPersonalInfoManager.GetDailys(PlayerId, pageNum, cb)
end
end
function XPersonalInfoManager.OpenInputView(cb)
if XPersonalInfoManager.PanelMsgBoard ~= nil then
XPersonalInfoManager.PanelMsgBoard.XUiPanelWriteDiary:OpenView(cb)
end
end
--增加管理对象
function XPersonalInfoManager.AddPanelPersonalInfo()
-- PanelPersonalInfo = obj
end
--End 增加管理对象
--Protolcol Model
local PROTOL_METHOD_NAME = {
GetDailys = "GetDailysRequest",
WriteDaily = "WriteDailyRequest",
GiveALike = "GiveLikeRequest",
AddLeaveMsg = "LeaveMsgRequest",
LookOverLeaveMsg = "LookOverLeaveMsgRequest",
DeleteDaily = "DeleteDailyRequest",
DeleteLeaveMsg = "DeleteLeaveMsgRequest",
BanWriteMsg = "BanMsgRequest",
ViewPersonalInfo = "ViewPersonalInfoRequest"
}
function XPersonalInfoManager.GetDailys(playerId, pageNum, cb)--获得日记内容,cb一般是用来刷新界面回调
PlayerId = playerId
local req = { PlayerId = playerId, PageNum = pageNum }
XNetwork.Call(PROTOL_METHOD_NAME.GetDailys, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
local pool = XPersonalInfoManager.GetPool(DailyServerDataPools, pageNum)
for _ = 1, #pool do--清除原有数据
table.remove(pool)
end
XTool.LoopCollection(response.DailyList, function(data)
table.insert(pool, data)
DailyDict[data.Id] = data
end)
if cb then
cb()
end
end)
end
function XPersonalInfoManager.WriteDaily(content, cb)--写日记
local req = { DailyContent = content }
XNetwork.Call(PROTOL_METHOD_NAME.WriteDaily, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if cb then
cb()
end
end)
end
function XPersonalInfoManager.GiveALike(playerId, dailyId, cb)--点赞
local req = { PlayerId = playerId, DailyId = dailyId }
XNetwork.Call(PROTOL_METHOD_NAME.GiveALike, req,
function(response)
if response.Code == XCode.DailyGiveALikeFail then
XUiManager.TipCode(response.Code)
return
end
if response.Code == XCode.DailyAddLikeSuccess and cb then
cb(true)
return
end
if response.Code == XCode.DailyDelLikeSuccess and cb then
cb(false)
return
end
end)
end
function XPersonalInfoManager.AddLeaveMsg(playerId, dailyId, content, cb)--留言
local req = { PlayerId = playerId, DailyId = dailyId, LeaveMsg = content }
XNetwork.Call(PROTOL_METHOD_NAME.AddLeaveMsg, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if cb then
cb()
return
end
end)
end
function XPersonalInfoManager.LookOverLeaveMsg(id, pageNum, cb)--查看留言
local req = { PlayerId = PlayerId, DailyId = id }
XNetwork.Call(PROTOL_METHOD_NAME.LookOverLeaveMsg, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
local pool = XPersonalInfoManager.GetPool(DailyServerDataPools, pageNum)
for _, v in pairs(pool) do
if v.Id == id then
v.Msgs = {}
XTool.LoopCollection(response.MsgArray, function(data)
table.insert(v.Msgs, data)
end)
break
end
end
if cb then
cb()
return
end
end)
end
function XPersonalInfoManager.DeleteDaily(id, cb)--删除日记
local req = { DailyId = id }
XNetwork.Call(PROTOL_METHOD_NAME.DeleteDaily, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if cb then
cb()
return
end
end)
end
function XPersonalInfoManager.DeleteLeaveMsg(dailyId, msgId, cb)--删除留言
local req = { DailyId = dailyId, MsgId = msgId }
XNetwork.Call(PROTOL_METHOD_NAME.DeleteLeaveMsg, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if DailyDict[dailyId] ~= nil then
DailyDict[dailyId].LeaveMsgCount = DailyDict[dailyId].LeaveMsgCount - 1
end
if cb then
cb()
return
end
end)
end
function XPersonalInfoManager.BanWriteMsg(id, cb)--禁止留言
local req = { DailyId = id }
XNetwork.Call(PROTOL_METHOD_NAME.BanWriteMsg, req,
function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if cb then
cb()
return
end
end)
end
function XPersonalInfoManager.ViewPersonalInfo(findId, cb)
XNetwork.Call(PROTOL_METHOD_NAME.ViewPersonalInfo, { viewId = findId }, function(response)
if response.Code ~= XCode.Success then
XUiManager.TipCode(response.Code)
return
end
if cb then
cb(response.Code, response.data)
end
end)
end
--End Protolcol Model
--Create Pool
function XPersonalInfoManager.GetPool(findPools, poolIndex)
if not findPools then
findPools = {}
end
local pool = findPools[poolIndex]
if not pool then
pool = {}
findPools[poolIndex] = pool
end
return pool
end
local GetLeaveMsgsById = function(pageNum, id)--取出当前Id的留言消息
LeaveMsgs = {}
local pool = XPersonalInfoManager.GetPool(DailyServerDataPools, pageNum)
for _, v in pairs(pool) do
if v.Id == id then
XTool.LoopCollection(v.Msgs, function(data)
table.insert(LeaveMsgs, data)
end)
return LeaveMsgs
end
end
return LeaveMsgs
end
local GetCallback = function(pageNum, id)
return function(item, data, i)
item:SetProperty(data, i, pageNum, id)
end
end
function XPersonalInfoManager.CreateItems(rootUi, item, parent, pageNum, id, selType, callback)
--pageNum页数 --id页数item里面的ID
local pool = selType == XPersonalInfoManager.ItemPanelType.DailyleaveMsg
and XPersonalInfoManager.GetPool(XPlayer.Id == PlayerData.Id
and DailyItemsPools or OtherDailyItemsPools, tonumber(pageNum .. id))
or XPersonalInfoManager.GetPool(XPlayer.Id == PlayerData.Id
and DailyItemsPools or OtherDailyItemsPools, pageNum)
local datas = selType == XPersonalInfoManager.ItemPanelType.DailyleaveMsg
and GetLeaveMsgsById(pageNum, id)
or XPersonalInfoManager.GetPool(DailyServerDataPools, pageNum)
local ctor = selType == XPersonalInfoManager.ItemPanelType.DailyleaveMsg and XUiPanelLeaveMsgItem.New or XUiPanelMsgBoardItem.New
local template = item
local onCreate = GetCallback(pageNum, id)
--1 对象池 2 数据源 3 Item构造 4 Clone源 5 Parent 6 create 7 Callback
XPersonalInfoManager.CreateTemplateItems(rootUi, pool, datas, ctor, template, parent, onCreate, callback)
end
function XPersonalInfoManager.CreateTemplateItems(rootUi, pool, datas, ctor, template, parent, onCreate, callback)
local tempTable = {}
local poolCount = #pool
if template then
template.gameObject:SetActive(false)
end
for i = 1, #datas do
local data = datas[i]
local item
if i <= poolCount then
item = pool[i]
else
if i == 1 then
item = template
else
item = CS.UnityEngine.Object.Instantiate(template)
end
item.transform:SetParent(parent, false)
item.transform.localEulerAngles = CS.UnityEngine.Vector3.zero
item.transform.localScale = CS.UnityEngine.Vector3.one
item = ctor(rootUi, item)
pool[i] = item
end
if onCreate then
onCreate(item, data, i)
end
table.insert(tempTable, item)
end
for i = #datas + 1, #pool do
local item = pool[i]
item.GameObject:SetActive(false)
end
if callback then
callback(tempTable)
end
end
--End Create Pool
function XPersonalInfoManager.OnDispose()
if PlayerId ~= nil and XPlayer.Id == PlayerId then
DailyItemsPools = {}
else
OtherDailyItemsPools = {}
end
DailyServerDataPools = {}
PlayerId = nil
LeaveMsgs = {}
XPersonalInfoManager.PanelMsgBoard = nil
-- PanelPersonalInfo = nil
end
XPersonalInfoManager.Init()
return XPersonalInfoManager
end