zhaoyang 3 years ago
parent
commit
6247eb6fc8

+ 5 - 1
GameClient/Assets/Game/HotUpdate/Constant/ConstMessage.cs

@@ -9,10 +9,14 @@ namespace GFGGame
 
 
         public const string SUIT_BOX_STATUS_CHANGED = "SUIT_BOX_STATUS_CHANGED";
         public const string SUIT_BOX_STATUS_CHANGED = "SUIT_BOX_STATUS_CHANGED";
         public const string CJ_FINISH = "CJ_FINISH";
         public const string CJ_FINISH = "CJ_FINISH";
+
         public const string MAIL_REFRESH = "MAIL_REFRESH";
         public const string MAIL_REFRESH = "MAIL_REFRESH";
         public const string MAIL_CHANGE = "MAIL_CHANGE";
         public const string MAIL_CHANGE = "MAIL_CHANGE";
-        public const string MAIL_ADD = "MAIL_ADD";
+        public const string MAIL_REWARD = "MAIL_REWARD";
+        public const string MAIL_ALLREWARD = "MAIL_ALLREWARD";
         public const string MAIL_DELETE = "MAIL_DELETE";
         public const string MAIL_DELETE = "MAIL_DELETE";
+        public const string MAIL_AllDELETE = "MAIL_AllDELETE";
+
         public const string DRESS_FILTER = "DRESS_FILTER";
         public const string DRESS_FILTER = "DRESS_FILTER";
         public const string DRESS_SEARCH = "DRESS_SEARCH";
         public const string DRESS_SEARCH = "DRESS_SEARCH";
         public const string CARD_CHOOSE = "CARD_CHOOSE";
         public const string CARD_CHOOSE = "CARD_CHOOSE";

+ 42 - 19
GameClient/Assets/Game/HotUpdate/Data/MailDataManager.cs

@@ -40,28 +40,50 @@ namespace GFGGame
             get { return _startIndex; }
             get { return _startIndex; }
             set { _startIndex = value; }
             set { _startIndex = value; }
         }
         }
-
+        public Dictionary<long, MailInfo> mailInfoDic = new Dictionary<long, MailInfo>();
 
 
         public List<MailInfo> mailInfos = new List<MailInfo>();
         public List<MailInfo> mailInfos = new List<MailInfo>();
-        public void UpdateMailInfoList(List<MailInfo> list)
+        public void RefreshMailInfoDic(bool sort)
         {
         {
-            mailInfos.Clear();
-            mailInfos = list;
+            if (sort)
+            {
+                mailInfoDic.Clear();
+            }
+        }
+
+        public void UpdateMainInfoDic(long mailId, MailInfo mailInfo)
+        {
+            if (!mailInfoDic.ContainsKey(mailId))
+            {
+                mailInfoDic.Add(mailId, mailInfo);
+            }
+            else
+            {
+                mailInfoDic[mailId] = mailInfo;
+            }
         }
         }
         public void UpdateMailContent(long mailId, int state, string content = "", List<ItemData> rewards = null)
         public void UpdateMailContent(long mailId, int state, string content = "", List<ItemData> rewards = null)
         {
         {
-            for (int i = 0; i < mailInfos.Count; i++)
+            mailInfoDic[mailId].state = state;
+            if (content != "") mailInfoDic[mailId].content = content;
+            if (rewards != null) mailInfoDic[mailId].rewards = rewards;
+
+        }
+
+
+        public List<MailInfo> GetMailInfos(int index, int count)
+        {
+            List<MailInfo> mailInfos = new List<MailInfo>();
+            for (int i = 0; i < count; i++)
             {
             {
-                if (mailInfos[i].mailId == mailId)
-                {
-                    mailInfos[i].state = state;
-                    if (content != "") mailInfos[i].content = content;
-                    if (rewards != null) mailInfos[i].rewards = rewards;
-                    break;
-                }
+                if (index + i + 1 > mailInfoDic.Count) break;
+                MailInfo mailInfo = mailInfoDic.ElementAt(index + i).Value;
+                mailInfos.Add(mailInfo);
             }
             }
+            return mailInfos;
         }
         }
 
 
+
         /// <summary>
         /// <summary>
         /// 根据邮件Id获取邮件信息
         /// 根据邮件Id获取邮件信息
         /// </summary>
         /// </summary>
@@ -69,13 +91,14 @@ namespace GFGGame
         /// <returns></returns>
         /// <returns></returns>
         public MailInfo GetMailInfoById(long mailId)
         public MailInfo GetMailInfoById(long mailId)
         {
         {
-            for (int i = 0; i < mailInfos.Count; i++)
-            {
-                if (mailInfos[i].mailId == mailId)
-                {
-                    return mailInfos[i];
-                }
-            }
+            // for (int i = 0; i < mailInfos.Count; i++)
+            // {
+            //     if (mailInfos[i].mailId == mailId)
+            //     {
+            //         return mailInfos[i];
+            //     }
+            // }
+            if (mailInfoDic.ContainsKey(mailId)) return mailInfoDic[mailId];
             return null;
             return null;
         }
         }
 
 

+ 11 - 7
GameClient/Assets/Game/HotUpdate/ServerProxy/MailSProxy.cs

@@ -46,6 +46,7 @@ namespace GFGGame
             {
             {
                 if (response.Error == ErrorCode.ERR_Success)
                 if (response.Error == ErrorCode.ERR_Success)
                 {
                 {
+                    MailDataManager.Instance.RefreshMailInfoDic(sort);
                     List<MailInfo> mailInfos = new List<MailInfo>();
                     List<MailInfo> mailInfos = new List<MailInfo>();
                     for (int i = 0; i < response.mailList.Count; i++)
                     for (int i = 0; i < response.mailList.Count; i++)
                     {
                     {
@@ -55,9 +56,10 @@ namespace GFGGame
                         mailInfo.timeSec = response.mailList[i].TimeSec;
                         mailInfo.timeSec = response.mailList[i].TimeSec;
                         mailInfo.state = response.mailList[i].Status;
                         mailInfo.state = response.mailList[i].Status;
                         mailInfo.hasItem = response.mailList[i].HasItem;
                         mailInfo.hasItem = response.mailList[i].HasItem;
-                        mailInfos.Add(mailInfo);
+                        // mailInfos.Add(mailInfo);
+                        MailDataManager.Instance.UpdateMainInfoDic(mailInfo.mailId, mailInfo);
                     }
                     }
-                    MailDataManager.Instance.UpdateMailInfoList(mailInfos);
+                    // MailDataManager.Instance.UpdateMailInfoList(mailInfos);
 
 
                     return true;
                     return true;
                 }
                 }
@@ -78,8 +80,9 @@ namespace GFGGame
                     int state = response.Status;
                     int state = response.Status;
                     string content = response.MailDetail.Content;
                     string content = response.MailDetail.Content;
                     List<ItemData> itemDatas = ItemUtil.CreateItemDataList(response.MailDetail.ItemList);
                     List<ItemData> itemDatas = ItemUtil.CreateItemDataList(response.MailDetail.ItemList);
-
                     MailDataManager.Instance.UpdateMailContent(response.MailId, state, content, itemDatas);
                     MailDataManager.Instance.UpdateMailContent(response.MailId, state, content, itemDatas);
+                    EventAgent.DispatchEvent(ConstMessage.MAIL_REFRESH);
+
                     return true;
                     return true;
                 }
                 }
             }
             }
@@ -97,7 +100,7 @@ namespace GFGGame
                     List<ItemData> itemDatas = MailDataManager.Instance.GetMailInfoById(response.MailId).rewards;
                     List<ItemData> itemDatas = MailDataManager.Instance.GetMailInfoById(response.MailId).rewards;
                     BonusController.TryShowBonusList(itemDatas);
                     BonusController.TryShowBonusList(itemDatas);
 
 
-                    EventAgent.DispatchEvent(ConstMessage.MAIL_REFRESH);
+                    EventAgent.DispatchEvent(ConstMessage.MAIL_REWARD);
                     return true;
                     return true;
                 }
                 }
             }
             }
@@ -114,7 +117,7 @@ namespace GFGGame
                 {
                 {
                     List<ItemData> itemDatas = ItemUtil.CreateItemDataList(response.ItemList);
                     List<ItemData> itemDatas = ItemUtil.CreateItemDataList(response.ItemList);
                     BonusController.TryShowBonusList(itemDatas);
                     BonusController.TryShowBonusList(itemDatas);
-                    EventAgent.DispatchEvent(ConstMessage.MAIL_REFRESH);
+                    EventAgent.DispatchEvent(ConstMessage.MAIL_ALLREWARD);
 
 
                     return true;
                     return true;
                 }
                 }
@@ -130,7 +133,8 @@ namespace GFGGame
                 if (response.Error == ErrorCode.ERR_Success)
                 if (response.Error == ErrorCode.ERR_Success)
                 {
                 {
                     MailDataManager.Instance.TotolCount = response.TotolCount;
                     MailDataManager.Instance.TotolCount = response.TotolCount;
-                    // EventAgent.DispatchEvent(ConstMessage.MAIL_CHANGE);
+
+                    EventAgent.DispatchEvent(ConstMessage.MAIL_DELETE);
 
 
                     return true;
                     return true;
                 }
                 }
@@ -148,7 +152,7 @@ namespace GFGGame
                     if (response.DeleteCount > 0)
                     if (response.DeleteCount > 0)
                     {
                     {
                         MailDataManager.Instance.TotolCount = MailDataManager.Instance.TotolCount - response.DeleteCount;
                         MailDataManager.Instance.TotolCount = MailDataManager.Instance.TotolCount - response.DeleteCount;
-                        EventAgent.DispatchEvent(ConstMessage.MAIL_CHANGE);
+                        EventAgent.DispatchEvent(ConstMessage.MAIL_AllDELETE);
 
 
                     }
                     }
 
 

+ 3 - 2
GameClient/Assets/Game/HotUpdate/Views/Mail/MailContentView.cs

@@ -28,6 +28,7 @@ namespace GFGGame
             _ui.m_listReward.itemRenderer = RenderListRewardItem;
             _ui.m_listReward.itemRenderer = RenderListRewardItem;
             _ui.m_btnGet.onClick.Add(OnClickBtnGet);
             _ui.m_btnGet.onClick.Add(OnClickBtnGet);
             _ui.m_btnDelete.onClick.Add(OnClickBtnDelete);
             _ui.m_btnDelete.onClick.Add(OnClickBtnDelete);
+            EventAgent.AddEventListener(ConstMessage.MAIL_REWARD, UpdateNormal);
 
 
         }
         }
         protected override void OnShown()
         protected override void OnShown()
@@ -35,8 +36,8 @@ namespace GFGGame
             base.OnShown();
             base.OnShown();
             // EventAgent.AddEventListener(ConstMessage.MAIL_CHANGE, UpdateNormal);
             // EventAgent.AddEventListener(ConstMessage.MAIL_CHANGE, UpdateNormal);
 
 
-            _childIndex = (int)this.viewData;
-            mailInfo = MailDataManager.Instance.mailInfos[_childIndex];
+            long mailId = (long)this.viewData;
+            mailInfo = MailDataManager.Instance.GetMailInfoById(mailId);
             _ui.m_c1.selectedIndex = mailInfo.rewards.Count == 0 ? 0 : 1;
             _ui.m_c1.selectedIndex = mailInfo.rewards.Count == 0 ? 0 : 1;
             _ui.m_txtTitle.text = mailInfo.title;
             _ui.m_txtTitle.text = mailInfo.title;
             _ui.m_ComContent.target.scrollPane.ScrollTop();
             _ui.m_ComContent.target.scrollPane.ScrollTop();

+ 34 - 41
GameClient/Assets/Game/HotUpdate/Views/Mail/MailView.cs

@@ -18,6 +18,8 @@ namespace GFGGame
         private int _firstChildIndex = 0;//列表显示内容得一个项的显示对象索引
         private int _firstChildIndex = 0;//列表显示内容得一个项的显示对象索引
 
 
         public bool _canShowContent = false;//获取内容数据返回前不可查看
         public bool _canShowContent = false;//获取内容数据返回前不可查看
+        public List<MailInfo> mailInfos = new List<MailInfo>();
+
         public override void Dispose()
         public override void Dispose()
         {
         {
             base.Dispose();
             base.Dispose();
@@ -34,17 +36,17 @@ namespace GFGGame
             viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
             viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
 
 
             _ui.m_list.itemRenderer = RenderListItem;
             _ui.m_list.itemRenderer = RenderListItem;
-            _ui.m_list.scrollPane.onScrollEnd.Add(OnListScrollEnd);
-            _ui.m_list.scrollPane.onScroll.Add(OnListScroll);
             _ui.m_list.SetVirtual();
             _ui.m_list.SetVirtual();
 
 
             _ui.m_btnGet.onClick.Add(OnClickBtnGet);
             _ui.m_btnGet.onClick.Add(OnClickBtnGet);
             _ui.m_btnDelete.onClick.Add(OnClickBtnDelete);
             _ui.m_btnDelete.onClick.Add(OnClickBtnDelete);
-            EventAgent.AddEventListener(ConstMessage.MAIL_REFRESH, () =>
-            {
-                _ui.m_list.RefreshVirtualList();
-            });
 
 
+
+            EventAgent.AddEventListener(ConstMessage.MAIL_REFRESH, RefreshList);
+            EventAgent.AddEventListener(ConstMessage.MAIL_REWARD, RefreshList);
+            EventAgent.AddEventListener(ConstMessage.MAIL_ALLREWARD, UpdateNormal);
+            EventAgent.AddEventListener(ConstMessage.MAIL_DELETE, UpdateNormal);
+            EventAgent.AddEventListener(ConstMessage.MAIL_AllDELETE, UpdateNormal);
             EventAgent.AddEventListener(ConstMessage.MAIL_CHANGE, UpdateNormal);
             EventAgent.AddEventListener(ConstMessage.MAIL_CHANGE, UpdateNormal);
 
 
             mailDataMgr = MailDataManager.Instance;
             mailDataMgr = MailDataManager.Instance;
@@ -68,62 +70,57 @@ namespace GFGGame
 
 
         private void RenderListItem(int index, GObject obj)
         private void RenderListItem(int index, GObject obj)
         {
         {
-            int childIndex = _ui.m_list.ItemIndexToChildIndex(index);
             UI_ListItem item = UI_ListItem.Proxy(obj);
             UI_ListItem item = UI_ListItem.Proxy(obj);
-            if (mailDataMgr.mailInfos.Count == 0) return;
-            MailInfo data = mailDataMgr.mailInfos[childIndex];
+            if (index + 1 > mailInfos.Count) return;
+            MailInfo data = mailInfos[index];
+
             item.m_c1.selectedIndex = mailDataMgr.GetMailState(data);
             item.m_c1.selectedIndex = mailDataMgr.GetMailState(data);
-            item.m_txtTitle.text = data.title;// string.Format("{0}...", data.content.Length > 10 ? data.content.Substring(0, 10) : data.content);
+            item.m_txtTitle.text = data.title;
             string str = TimeUtil.FormattingTime(TimeHelper.ServerNowSecs, ((int)data.timeSec + _retainDay * TimeUtil.SECOND_PER_DAY));
             string str = TimeUtil.FormattingTime(TimeHelper.ServerNowSecs, ((int)data.timeSec + _retainDay * TimeUtil.SECOND_PER_DAY));
             item.m_txtTime.text = string.Format("剩余时间:{0}", str);
             item.m_txtTime.text = string.Format("剩余时间:{0}", str);
-            if (item.target.data == null)
+            if (item.m_btnLook.data == null)
             {
             {
                 item.m_btnLook.onClick.Add(OnClickBtnLook);
                 item.m_btnLook.onClick.Add(OnClickBtnLook);
             }
             }
-            item.target.data = index;
             item.m_btnLook.data = index;
             item.m_btnLook.data = index;
 
 
         }
         }
         private async void OnClickBtnLook(EventContext context)
         private async void OnClickBtnLook(EventContext context)
         {
         {
-            if (!_canShowContent) return;
             int index = (int)(context.sender as GObject).data;
             int index = (int)(context.sender as GObject).data;
-            int childIndex = (int)_ui.m_list.ItemIndexToChildIndex(index);
-            bool result = await MailSProxy.ReqMailContent(mailDataMgr.mailInfos[childIndex].mailId);
+
+            bool result = await MailSProxy.ReqMailContent(mailInfos[index].mailId);
             if (result)
             if (result)
             {
             {
-                ViewManager.Show<MailContentView>(childIndex);
+                ViewManager.Show<MailContentView>(mailInfos[index].mailId);
             }
             }
         }
         }
 
 
 
 
-        private void OnListScroll()
-        {
-            _canShowContent = false;
-        }
-        private void OnListScrollEnd()
-        {
-            _firstChildIndex = (int)_ui.m_list.GetChildAt(0).data;
-            RefreshMailInfo(_firstChildIndex, false);
-        }
-
         private async void RefreshMailInfo(int index, bool needSort)
         private async void RefreshMailInfo(int index, bool needSort)
         {
         {
-            bool result = await MailSProxy.ReqMailList(index, _showCount, needSort);
+            if (mailDataMgr.TotolCount == 0) return;
+            if (needSort)
+            {
+                _ui.m_list.ScrollToView(0);
+            }
+            bool result = await MailSProxy.ReqMailList(index, mailDataMgr.TotolCount, needSort);
             if (result)
             if (result)
             {
             {
-                _ui.m_list.RefreshVirtualList();
+                mailInfos = mailDataMgr.GetMailInfos(index, mailDataMgr.TotolCount);
+                RefreshList();
                 _canShowContent = true;
                 _canShowContent = true;
             }
             }
         }
         }
+        private void RefreshList()
+        {
+            _ui.m_list.RefreshVirtualList();
 
 
-        private async void OnClickBtnGet()
+        }
+        private void OnClickBtnGet()
         {
         {
-            bool result = await MailSProxy.ReqAllMailRewards();
-            if (result)
-            {
-                RefreshMailInfo(_firstChildIndex, false);
-            }
+            MailSProxy.ReqAllMailRewards().Coroutine();
+
         }
         }
 
 
         private void OnClickBtnDelete()
         private void OnClickBtnDelete()
@@ -133,14 +130,10 @@ namespace GFGGame
                 SendDeleteAll();
                 SendDeleteAll();
             });
             });
         }
         }
-        private async void SendDeleteAll()
+        private void SendDeleteAll()
         {
         {
-            bool result = await MailSProxy.ReqDeleteAllMails();
-            if (result)
-            {
-                _ui.m_list.ScrollToView(0);
-                RefreshMailInfo(0, true);
-            }
+            MailSProxy.ReqDeleteAllMails().Coroutine();
+
         }
         }
         protected override void OnHide()
         protected override void OnHide()
         {
         {