From c029301901b959c73309fc7ccc99e47db9d56706 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Thu, 26 Oct 2023 13:42:46 +0800 Subject: [PATCH] save --- server/mailserver/mail/mail.go | 6 +- server/mailserver/mail/mailmgr.go | 17 +++-- server/mailserver/player/player.go | 111 +++++++++++++++++++++++------ 3 files changed, 105 insertions(+), 29 deletions(-) diff --git a/server/mailserver/mail/mail.go b/server/mailserver/mail/mail.go index 7769ec0d..72a9926f 100644 --- a/server/mailserver/mail/mail.go +++ b/server/mailserver/mail/mail.go @@ -18,12 +18,12 @@ type Mail struct { Subject string `json:"subject"` Content string `json:"content"` Flag int `json:"flags"` - SendTime int `json:"sendtime"` - Expiretime int `json:"expiretime"` + SendTime int32 `json:"sendtime"` + ExpireTime int32 `json:"expiretime"` Mailtype int `json:"mailtype"` Mailsubtype int `json:"mailsubtype"` Usertype int `json:"-"` - Createtime int `json:"-"` + CreateTime int32 `json:"-"` Ext string `json:"ext"` ATT []*Attachments `json:"attachments"` } diff --git a/server/mailserver/mail/mailmgr.go b/server/mailserver/mail/mailmgr.go index edaef90e..7dd07110 100644 --- a/server/mailserver/mail/mailmgr.go +++ b/server/mailserver/mail/mailmgr.go @@ -3,8 +3,8 @@ package mail import ( "f5" "fmt" + "main/common" "main/constant" - "main/player" "q5" ) @@ -14,7 +14,7 @@ type MailMgr struct { playerMailHash map[string]map[int64]*Mail currReqId int64 lastFetchMailTick int64 - accountHash map[string]*player.Player + accountHash map[string]*common.Player } func (mm *MailMgr) Init() { @@ -27,6 +27,13 @@ func (mm *MailMgr) Init() { func (mm *MailMgr) UnInit() { } +func (mm *MailMgr) GetMail(mailId int64) *Mail { + if m, exists := mm.allMailHash[mailId]; exists { + return m + } + return nil +} + func (mm *MailMgr) FetchMailFromDB() { timer := f5.GetTimer() timer.SetInterval(1000, func(e int32, args *q5.Args) { @@ -67,9 +74,9 @@ func (mm *MailMgr) LoadFromDB() { m.Mailtype = q5.ToInt(*rows.GetByName("mailtype")) m.Mailsubtype = q5.ToInt(*rows.GetByName("mailsubtype")) m.Usertype = q5.ToInt(*rows.GetByName("usertype")) - m.SendTime = q5.ToInt(*rows.GetByName("sendtime")) - m.Expiretime = q5.ToInt(*rows.GetByName("expiretime")) - m.Createtime = q5.ToInt(*rows.GetByName("createtime")) + m.SendTime = q5.ToInt32(*rows.GetByName("sendtime")) + m.ExpireTime = q5.ToInt32(*rows.GetByName("expiretime")) + m.CreateTime = q5.ToInt32(*rows.GetByName("createtime")) // parse ATT m.ParseAttachments(q5.ToString(*rows.GetByName("attachments"))) diff --git a/server/mailserver/player/player.go b/server/mailserver/player/player.go index e5e90849..7c9b4661 100644 --- a/server/mailserver/player/player.go +++ b/server/mailserver/player/player.go @@ -1,7 +1,11 @@ package player import ( + "main/global" + "main/mail" "main/ss" + "q5" + "strings" "sync" "time" ) @@ -42,45 +46,110 @@ func (p *Player) IsDeletedMail(mailId int64) bool { return m != nil } -func (p *Player) MarkMail(mailIds string) {} -func (p *Player) DeleteMails(mailIds string) {} +func (p *Player) MarkMail(mailIds string) { + nowUnixSec := time.Now().Unix() + mailMgrPtr := global.GetMailMgr().(*mail.MailMgr) + mailIdStrings := strings.Split(mailIds, ",") + for _, mailId := range mailIdStrings { + mailObj := mailMgrPtr.GetMail(q5.ToInt64(mailId)) + if mailObj != nil { + m := &ReadMail{ + mailId: mailObj.MailId, + readTime: int32(nowUnixSec), + expireTime: mailObj.ExpireTime, + } + p.ReadMailHash[mailObj.MailId] = m + p.MarkDirty() + } + } +} + +func (p *Player) DeleteMails(mailIds string) { + nowUnixSec := time.Now().Unix() + mailMgrPtr := global.GetMailMgr().(*mail.MailMgr) + + mailIdStrings := strings.Split(mailIds, ",") + for _, mailId := range mailIdStrings { + mailObj := mailMgrPtr.GetMail(q5.ToInt64(mailId)) + if mailObj != nil { + m := &DeletedMail{ + mailId: mailObj.MailId, + deleteTime: int32(nowUnixSec), + expireTime: mailObj.ExpireTime, + } + p.DeletedMailHash[mailObj.MailId] = m + p.MarkDirty() + } + } +} func (p *Player) AddToReadList(mailIds string) {} func (p *Player) GetAttachment(mailIds string) {} func (p *Player) Deserialize(accountPB *ss.MFAccountData) { var nextDaySec int32 = 3600 * 24 - unixSec := int32(time.Now().Unix()) + nowUnixSec := int32(time.Now().Unix()) for _, MFReadMail := range accountPB.GetReadMailList() { expireTime := MFReadMail.GetExpireTime() + nextDaySec - if expireTime < unixSec { - continue + if expireTime > nowUnixSec { + readMail := &ReadMail{ + mailId: MFReadMail.GetMailId(), + readTime: MFReadMail.GetReadTime(), + expireTime: MFReadMail.GetExpireTime(), + } + p.ReadMailHash[readMail.mailId] = readMail + + if readMail.readTime <= 1590577793 { + delMail := &DeletedMail{ + mailId: readMail.mailId, + deleteTime: readMail.readTime, + expireTime: readMail.expireTime, + } + p.DeletedMailHash[delMail.mailId] = delMail + } } - readMail := &ReadMail{ - mailId: MFReadMail.GetMailId(), - readTime: MFReadMail.GetReadTime(), - expireTime: MFReadMail.GetExpireTime(), - } - p.ReadMailHash[readMail.mailId] = readMail } for _, MFDeletedMail := range accountPB.GetDeletedMailList() { expireTime := MFDeletedMail.GetExpireTime() + nextDaySec - if expireTime < unixSec { - continue + if expireTime > nowUnixSec { + deleteMail := &DeletedMail{ + mailId: MFDeletedMail.GetMailId(), + deleteTime: MFDeletedMail.GetDeleteTime(), + expireTime: MFDeletedMail.GetExpireTime(), + } + p.DeletedMailHash[deleteMail.mailId] = deleteMail } - - deleteMail := &DeletedMail{ - mailId: MFDeletedMail.GetMailId(), - deleteTime: MFDeletedMail.GetDeleteTime(), - expireTime: MFDeletedMail.GetExpireTime(), - } - p.DeletedMailHash[deleteMail.mailId] = deleteMail } } -func (p *Player) Serialize(accountPB ss.MFAccountData) { +func (p *Player) Serialize(accountPB *ss.MFAccountData) { + var nextDaySec int32 = 3600 * 24 + nowUnixSec := time.Now().Unix() + for _, readMail := range p.ReadMailHash { + if int64(readMail.expireTime+nextDaySec) > nowUnixSec { + p2 := &ss.MFReadMail{ + MailId: &readMail.mailId, + ReadTime: &readMail.readTime, + ExpireTime: &readMail.expireTime, + } + accountPB.ReadMailList = append(accountPB.ReadMailList, p2) + } + } + + for _, deletedMail := range p.DeletedMailHash { + if int64(deletedMail.expireTime+nextDaySec) > nowUnixSec { + p3 := &ss.MFDeletedMail{ + MailId: &deletedMail.mailId, + DeleteTime: &deletedMail.deleteTime, + ExpireTime: &deletedMail.expireTime, + } + accountPB.DeletedMailList = append(accountPB.DeletedMailList, p3) + } + } } func (p *Player) SaveToDB() {} + +func (p *Player) MarkDirty() {}