2023-12-11 18:56:57 +08:00
|
|
|
|
using Framework;
|
|
|
|
|
|
using Gameplay;
|
2023-12-25 16:48:52 +08:00
|
|
|
|
using Gameplay.Common;
|
2023-12-11 18:56:57 +08:00
|
|
|
|
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;
|
2023-12-12 19:35:47 +08:00
|
|
|
|
|
|
|
|
|
|
public const int MailStatus_New = 0;
|
|
|
|
|
|
public const int MailStatus_Opened = 1;
|
|
|
|
|
|
public const int MailStatus_Cliamed = 2;
|
2023-12-11 18:56:57 +08:00
|
|
|
|
public void Init()
|
|
|
|
|
|
{
|
|
|
|
|
|
DataList = new List<SingleMail>();
|
|
|
|
|
|
DataDic = new Dictionary<ulong, SingleMail>();
|
|
|
|
|
|
isHaveAll = false;
|
2023-12-25 16:48:52 +08:00
|
|
|
|
RegisterEvent();
|
2023-12-11 18:56:57 +08:00
|
|
|
|
}
|
2023-12-25 16:48:52 +08:00
|
|
|
|
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);
|
2023-12-11 18:56:57 +08:00
|
|
|
|
|
2023-12-25 16:48:52 +08:00
|
|
|
|
}
|
2023-12-11 18:56:57 +08:00
|
|
|
|
public void Release()
|
|
|
|
|
|
{
|
2023-12-12 19:35:47 +08:00
|
|
|
|
DataList.Clear();
|
|
|
|
|
|
DataDic .Clear();
|
|
|
|
|
|
isHaveAll = false;
|
2023-12-25 16:48:52 +08:00
|
|
|
|
UnregisterEvent();
|
2023-12-11 18:56:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
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;
|
2024-01-12 13:33:12 +08:00
|
|
|
|
if (DataDic.TryGetValue(mail.Id, out info2))
|
2023-12-11 18:56:57 +08:00
|
|
|
|
{
|
2024-01-12 13:33:12 +08:00
|
|
|
|
DataDic[mail.Id].Refresh(mail);
|
2023-12-11 18:56:57 +08:00
|
|
|
|
for (int i = 0; i < DataList.Count; i++)
|
|
|
|
|
|
{
|
2024-01-12 13:33:12 +08:00
|
|
|
|
if (DataList[i].Id == mail.Id)
|
2023-12-11 18:56:57 +08:00
|
|
|
|
{
|
|
|
|
|
|
DataList[i].Refresh(mail);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2023-12-25 16:48:52 +08:00
|
|
|
|
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;
|
|
|
|
|
|
});
|
2024-01-12 13:33:12 +08:00
|
|
|
|
RemoveMail(DataList[DataList.Count - 1].Id);
|
2023-12-25 16:48:52 +08:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SingleMail newInfo = new SingleMail(mail);
|
|
|
|
|
|
DataList.Add(newInfo);
|
2024-01-12 13:33:12 +08:00
|
|
|
|
DataDic[mail.Id] = newInfo;
|
2023-12-25 16:48:52 +08:00
|
|
|
|
MailSystem.Instance.isHaveAll = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:56:57 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-12-12 19:35:47 +08:00
|
|
|
|
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);
|
2024-01-12 13:33:12 +08:00
|
|
|
|
DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed);
|
2023-12-12 19:35:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < DataList.Count; i++)
|
|
|
|
|
|
{
|
2024-01-12 13:33:12 +08:00
|
|
|
|
if (DataList[i].Id==id)
|
2023-12-12 19:35:47 +08:00
|
|
|
|
{
|
|
|
|
|
|
DataList[i].SetStatus(MailStatus_Cliamed);
|
2024-01-12 13:33:12 +08:00
|
|
|
|
DataDic[DataList[i].Id].SetStatus(MailStatus_Cliamed);
|
2023-12-12 19:35:47 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2023-12-18 19:59:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public SingleMail GetMail(uint mailID)
|
|
|
|
|
|
{
|
|
|
|
|
|
SingleMail mail = null;
|
|
|
|
|
|
if(DataDic.TryGetValue(mailID,out mail))
|
|
|
|
|
|
{
|
|
|
|
|
|
return mail;
|
|
|
|
|
|
}else
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("你莫得这个Id的邮件,不要找了: " + mailID);
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
2023-12-12 19:35:47 +08:00
|
|
|
|
}
|
2023-12-19 14:19:07 +08:00
|
|
|
|
public bool IsHaveLingQuMail()
|
|
|
|
|
|
{
|
|
|
|
|
|
for (int i = 0; i < DataList.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (DataList[i].Status!=MailSystem.MailStatus_Cliamed)
|
|
|
|
|
|
{
|
|
|
|
|
|
return true;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2023-12-12 19:35:47 +08:00
|
|
|
|
|
2023-12-11 18:56:57 +08:00
|
|
|
|
|
|
|
|
|
|
}
|