91 lines
1.9 KiB
Go
91 lines
1.9 KiB
Go
package mail
|
|
|
|
import (
|
|
"main/common"
|
|
"main/constant"
|
|
"time"
|
|
)
|
|
|
|
func (mm *MailMgr) AddMail(m *Mail) {
|
|
unixSec := int32(time.Now().Unix())
|
|
if m.ExpireTime < unixSec {
|
|
return
|
|
}
|
|
if _, exists := mm.allMailHash[m.MailId]; exists {
|
|
return
|
|
}
|
|
|
|
mailId := m.MailId
|
|
mm.allMailHash[mailId] = m
|
|
if m.MailType == constant.MAIL_TYPE_GROUP {
|
|
if mm.gameMailHash[m.GameId] == nil {
|
|
mm.gameMailHash[m.GameId] = make(map[int64]*Mail)
|
|
}
|
|
mm.gameMailHash[m.GameId][mailId] = m
|
|
return
|
|
}
|
|
|
|
if m.MailType == constant.MAIL_TYPE_PLAYER {
|
|
if mm.playerMailHash[m.To] == nil {
|
|
mm.playerMailHash[m.To] = make(map[int64]*Mail)
|
|
}
|
|
mm.playerMailHash[m.To][mailId] = m
|
|
return
|
|
}
|
|
}
|
|
|
|
func (mm *MailMgr) GetMails(player common.Player) []*Mail {
|
|
gameMails := mm.gameMailHash[constant.GAMEID]
|
|
playerMails := mm.playerMailHash[player.GetAccountId()]
|
|
playerMailSize := len(playerMails)
|
|
if len(gameMails)+playerMailSize == 0 {
|
|
return nil
|
|
}
|
|
|
|
resMailsSize := len(gameMails)
|
|
if playerMailSize > 0 {
|
|
resMailsSize += playerMailSize
|
|
}
|
|
|
|
resMailList := make([]*Mail, 0, resMailsSize)
|
|
for _, gMail := range gameMails {
|
|
if player.IsUnreadMail(gMail.MailId) {
|
|
gMail.Flag = 0
|
|
} else {
|
|
gMail.Flag = 1 << 0
|
|
}
|
|
resMailList = append(resMailList, gMail)
|
|
}
|
|
if playerMailSize > 0 {
|
|
for _, pMail := range playerMails {
|
|
if player.IsUnreadMail(pMail.MailId) {
|
|
pMail.Flag = 0
|
|
} else {
|
|
pMail.Flag = 1 << 0
|
|
}
|
|
resMailList = append(resMailList, pMail)
|
|
}
|
|
}
|
|
return resMailList
|
|
}
|
|
|
|
func (mm *MailMgr) GetUnreadMailCount(accountObj common.Player) int {
|
|
mailCnt := 0
|
|
if gameMails, ok := mm.gameMailHash[constant.GAMEID]; ok {
|
|
for _, mailObj := range gameMails {
|
|
if mailObj.IsReadableMail(accountObj) {
|
|
mailCnt++
|
|
}
|
|
}
|
|
}
|
|
if playerMails, ok := mm.playerMailHash[accountObj.GetAccountId()]; ok {
|
|
for _, mailObj := range playerMails {
|
|
if mailObj.IsReadableMail(accountObj) {
|
|
mailCnt++
|
|
}
|
|
}
|
|
}
|
|
|
|
return mailCnt
|
|
}
|