MailData.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. local MailData = class("MailData", require("DataBase"))
  2. local BitUtil = require("BitUtil")
  3. function MailData:ctor()
  4. self.data = {}
  5. end
  6. function MailData:InitMailData(mailData)
  7. if mailData == nil then return end
  8. self.data.mailCount = mailData.total_mail_count
  9. if self.data.mailDatas == nil then
  10. self.data.mailDatas = {}
  11. end
  12. for _,v in pairs(mailData.mail_list) do
  13. local data = ProtocalDataNormal.ParseMailContentData(v)
  14. local mail = self:GetMailDataById(data.id)
  15. if mail == nil then
  16. self.data.mailDatas[#self.data.mailDatas + 1] = data
  17. else
  18. mail = data
  19. end
  20. data.newState = 1 - BitUtil.ParseMailReadState(data.state)
  21. end
  22. CommonUtil.ArraySortSelections(self.data.mailDatas, Enum.TableSortRule.Down, "newState", "id")
  23. self:HasNewMail()
  24. --local data = {}
  25. --data.state = Enum.MailStateEnum.NO_OPEN
  26. --data.title = "haha"
  27. --data.content = "1123123"
  28. --self.data.mailDatas[#self.data.mailDatas + 1] = data
  29. --
  30. --data = {}
  31. --data.state = Enum.MailStateEnum.NO_OPEN_NO_RECEIVE
  32. --data.title = "haha1"
  33. --data.content = "1231242342345345"
  34. --data.awards = {{key = 1, value = 100} , {key = 2, value = 200}, {key = 3, value = 300}}
  35. --self.data.mailDatas[#self.data.mailDatas + 1] = data
  36. end
  37. function MailData:QueryMailData()
  38. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_MAIL_LIST_REQ, {})
  39. end
  40. function MailData:HasNewMail()
  41. local newMail = false
  42. for _,v in pairs(self.data.mailDatas) do
  43. newMail = BitUtil.ParseMailReadState(v.state) == 0
  44. if newMail then
  45. break
  46. end
  47. end
  48. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.RED_POINT_MGR_NOTICE, Enum.RPNotifyType.NewMail, newMail)
  49. return newMail
  50. end
  51. function MailData:GetMailDatas()
  52. return self.data.mailDatas
  53. end
  54. function MailData:GetMailTotalCount()
  55. return self.data.mailCount
  56. end
  57. function MailData:GetMailDataById(id)
  58. for k,v in pairs(self.data.mailDatas) do
  59. if id == v.id then
  60. return v, k
  61. end
  62. end
  63. return nil
  64. end
  65. function MailData:RefreshMailDatas(datas)
  66. self.data.mailCount = datas.total_mail_count
  67. if self.data.mailDatas == nil then
  68. self.data.mailDatas = {}
  69. end
  70. for _,v in pairs(datas.add_mail_list) do
  71. local data = ProtocalDataNormal.ParseMailContentData(v)
  72. self.data.mailDatas[#self.data.mailDatas + 1] = data
  73. data.newState = 1 - BitUtil.ParseMailReadState(data.state)
  74. end
  75. for _,v in pairs(datas.mail_state_list) do
  76. local mail = self:GetMailDataById(v.key)
  77. if mail then
  78. mail.state = v.value
  79. mail.newState = 1 - BitUtil.ParseMailReadState(mail.state)
  80. end
  81. end
  82. for _,v in pairs(datas.del_mail_list) do
  83. local mail, k = self:GetMailDataById(v)
  84. table.remove(self.data.mailDatas, k)
  85. end
  86. CommonUtil.ArraySortSelections(self.data.mailDatas, Enum.TableSortRule.Down, "newState", "id")
  87. self:HasNewMail()
  88. end
  89. function MailData:RegisterNetEvents()
  90. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAIL_LIST_ACK, function(data)
  91. self:InitMailData(data)
  92. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_MAILS, true)
  93. end)
  94. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAIL_CHANGE_NTF, function(data)
  95. self:RefreshMailDatas(data)
  96. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_MAILS, true)
  97. end)
  98. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAIL_READ_ACK, function(data)
  99. if data.error == Enum.NetErrorCode.ERROR_OK then
  100. self:HasNewMail()
  101. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.READ_MAIL)
  102. end
  103. end)
  104. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAIL_REWARD_ACK, function(data)
  105. if data.error == Enum.NetErrorCode.ERROR_OK then
  106. CommonUtil.ACKShowRewardList(data.reward_list)
  107. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REWARD_MAIL, true)
  108. end
  109. end)
  110. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MAIL_DEL_READ_ACK, function(data)
  111. if data.error == Enum.NetErrorCode.ERROR_OK then
  112. --ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.REFRESH_MAILS, true)
  113. end
  114. end)
  115. end
  116. function MailData:Clear()
  117. self.data = {}
  118. end
  119. function MailData:Destroy()
  120. if self.Clear then
  121. self:Clear()
  122. end
  123. self:UnRegisterNetEvents()
  124. end
  125. function MailData:UnRegisterNetEvents()
  126. end
  127. return MailData