using Framework; using Gameplay; using Gameplay.Common; using Gameplay.Net; using PhxhSDK; using System.Collections.Generic; public class MailSystem : Singlenton, IInitable { public List DataList; public Dictionary DataDic; public bool isHaveAll; public const int MailStatus_New = 0; public const int MailStatus_Opened = 1; public const int MailStatus_Cliamed = 2; public void Init() { DataList = new List(); DataDic = new Dictionary(); isHaveAll = false; RegisterEvent(); } private void RegisterEvent() { EventManager.Instance.Register(EventManager.EventName.HaveNewMail, OnHaveNewMail); } private void OnHaveNewMail() { NetHelper.RequestMailList(!MailSystem.Instance.isHaveAll); } private void UnregisterEvent() { EventManager.Instance.Unregister(EventManager.EventName.HaveNewMail, OnHaveNewMail); } public void Release() { DataList.Clear(); DataDic .Clear(); isHaveAll = false; UnregisterEvent(); } public void RemoveMail(ulong id) { SingleMail mail = null; if (DataDic.TryGetValue(id, out mail)) { DataDic.Remove(id); DataList.Remove(mail); } else { DebugUtil.LogError("移除id为{0}的邮件失败",id); } } public void AddMail(Mail mail) { SingleMail info2; if (DataDic.TryGetValue(mail.Id, out info2)) { DataDic[mail.Id].Refresh(mail); for (int i = 0; i < DataList.Count; i++) { if (DataList[i].Id == mail.Id) { DataList[i].Refresh(mail); return; } } } else { if (DataList.Count >= GLConfig.Inst.data.MaxMailCount) { DataList.Sort((a, b) => { int Result = a.Status.CompareTo(b.Status); if (Result == 0) { Result = b.SendTime.CompareTo(a.SendTime); if (Result == 0) { Result = a.MailID.CompareTo(b.MailID); } } return Result; }); RemoveMail(DataList[DataList.Count - 1].Id); } SingleMail newInfo = new SingleMail(mail); DataList.Add(newInfo); DataDic[mail.Id] = newInfo; MailSystem.Instance.isHaveAll = true; } } public void SetStatus(ulong id,uint status) { DataDic[id].SetStatus(status); for (int i = 0; i < DataList.Count; i++) { if (DataList[i].Status==status) { DataList[i].SetStatus(status); return; } } } public void HandleIds(ulong id) { if(id==0) { for (int i = 0; i < DataList.Count; i++) { if ((DataList[i].Status == MailStatus_Opened) && (DataList[i].MailData!=null)) { DataList[i].SetStatus(MailStatus_Cliamed); DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed); } } }else { for (int i = 0; i < DataList.Count; i++) { if (DataList[i].Id==id) { DataList[i].SetStatus(MailStatus_Cliamed); DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed); } } } } public SingleMail GetMail(uint mailID) { SingleMail mail = null; if(DataDic.TryGetValue(mailID,out mail)) { return mail; }else { DebugUtil.LogError("你莫得这个Id的邮件,不要找了: " + mailID); return null; } } public bool IsHaveLingQuMail() { for (int i = 0; i < DataList.Count; i++) { if (DataList[i].Status!=MailSystem.MailStatus_Cliamed) { return true; } } return false; } }