Files
Main/Assets/GameAssets/Resources/Lua/Logic/FeedBack/FeedBackSystem.lua
2025-01-25 04:38:09 +08:00

150 lines
4.4 KiB
Lua

------------------------------------------------
--作者: gzg
--日期: 2019-05-15
--文件: FeedBackSystem.lua
--模块: FeedBackSystem
--描述: 玩家反馈系统
------------------------------------------------
local FeedBackInfo = require("Logic.FeedBack.FeedBackInfo");
local FeedBackSystem ={
--数据
FeedbackList = List:New(),
--数据是否被修改
IsDirty = false,
--最后一次提交的时间
LastPostDateTime = 0
};
local L_CN_FD_KEY = "FeedbackList4";
local L_CN_FD_MAX_COUNT = 10;
--==公共方法==--
function FeedBackSystem:Initialize()
end
function FeedBackSystem:UnInitialize()
end
--获取最后反馈的时间
function FeedBackSystem:GetLastPostDateTime()
if self.LastPostDateTime <= 0 then
if self.FeedbackList:Count() > 0 then
for _,v in ipairs(self.FeedbackList) do
if v.Type == 1 and v.SendTime > self.LastPostDateTime then
self.LastPostDateTime = v.SendTime;
end
end
end
end
return self.LastPostDateTime;
end
--读取数据
function FeedBackSystem:Read()
local _key = L_CN_FD_KEY .. PlayerPrefs.GetString("account", "");
self.IsDirty = false;
local _feedStr = PlayerPrefs.GetString(_key,"");
if string.len(_feedStr ) > 10 then
local _tab = Utils.StrToTable(_feedStr);
self.FeedbackList:Clear();
for k,v in ipairs(_tab) do
self.FeedbackList:Add(FeedBackInfo:FromData(v));
end
end
end
--保存数据
function FeedBackSystem:Save()
if self.IsDirty then
local _key = L_CN_FD_KEY .. PlayerPrefs.GetString("account", "");
self.IsDirty = false;
local _tab = {};
local _startIdx = #self.FeedbackList - L_CN_FD_MAX_COUNT;
if _startIdx <=0 then _startIdx = 1; end
for i = _startIdx, #self.FeedbackList do
_tab[i] = self.FeedbackList[i]:ToData();
end
local _feedStr = Utils.TableToStr(_tab);
PlayerPrefs.SetString(_key,_feedStr);
end
end
--转换List
function FeedBackSystem:ConvertList(msgList)
local _result = List:New();
for i = 0, msgList.Count do
--转换数据
_result:Add(FeedBackInfo:New(msgList[i].Sender,msgList[i].Type,msgList[i].SendTime,msgList[i].Contend));
end
return _result;
end
--通过类型获取反馈的信息列表
function FeedBackSystem:GetFeedBackByType(type)
local _result = List:New();
local _time = List:New();
local dataList = self.FeedbackList;
for i = 1, #dataList do
--把不和条件的过滤过去
if type == 0 or type == dataList[i].Type then
_result:Add(dataList[i]);
--处理日期提示
local _curDay = math.modf(dataList[i].SendTime/86400) ;--(60*60*24)
_curDay = _curDay * 86400;
local _find = false;
for j = 1 , #_time do
if _time[j] == _curDay then
_find = true;
break;
end
end
if not _find then
local _tmp = FeedBackInfo:New(0,type,_curDay,Time.StampToDateTime(_curDay,"yyyy-MM-dd"));
_result:Add(_tmp);
_time:Add(_curDay);
end
end
end
_time = nil;
--根据时间升序排列
_result:Sort(function(a,b) return a.SendTime < b.SendTime end );
return _result;
end
--==处理网络消息==--
--接受GM反馈信息
function FeedBackSystem:GS2U_ResGMFeedback(msg)
self.IsDirty = true;
for k,v in ipairs(msg.list) do
local _fb = FeedBackInfo:New(1,v.type,Time.GetNowSeconds()+1,v.content);
self.FeedbackList:Add(_fb);
end
self:Save();
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FEEDBACK_LIST_CHANGED);
end
--提交反馈信息是否成功的返回
function FeedBackSystem:GS2U_ResCommitFeedback(msg)
if msg.success then
self:Save();
else
self:Read();
end
GameCenter.PushFixEvent(LogicLuaEventDefine.EID_FEEDBACK_LIST_CHANGED);
end
--提交反馈给服务器
function FeedBackSystem:PostFeedBack(t,c)
local _fb = FeedBackInfo:New(2,t,Time.GetNowSeconds(),c);
self.FeedbackList:Add(_fb);
self.IsDirty = true;
self.LastPostDateTime = _fb.SendTime;
GameCenter.Network.Send("MSG_Setting.ReqCommitFeedback", {type = t, content = c});
end
return FeedBackSystem;