150 lines
4.4 KiB
Lua
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;
|