NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/UI/Mail/MailSystem.cs

171 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Framework;
using Gameplay;
using Gameplay.Common;
using Gameplay.Net;
using PhxhSDK;
using System.Collections.Generic;
public class MailSystem : Singlenton<MailSystem>, IInitable
{
public List<SingleMail> DataList;
public Dictionary<ulong, SingleMail> 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<SingleMail>();
DataDic = new Dictionary<ulong, SingleMail>();
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 = b.Status.CompareTo(a.Status);
if (Result == 0)
{
Result = a.SendTime.CompareTo(b.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;
}
}