119 lines
2.5 KiB
Go
119 lines
2.5 KiB
Go
package game
|
|
|
|
import (
|
|
"encoding/json"
|
|
"server/GoUtil"
|
|
"server/db"
|
|
"server/game/mod/item"
|
|
"server/game/mod/msg"
|
|
"server/pkg/github.com/name5566/leaf/log"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
MAIL_SEND_TYPE_SERVER = 1
|
|
MAIL_SEND_TYPE_USER = 2
|
|
)
|
|
|
|
type MailMgr struct {
|
|
*ServerMod
|
|
list map[int]*ServerMail
|
|
}
|
|
|
|
type MailData struct {
|
|
List map[int][]*msg.Msg
|
|
}
|
|
|
|
type ServerMail struct {
|
|
Id int
|
|
Title string
|
|
Content string
|
|
TitleEn string
|
|
ContentEn string
|
|
Items []*item.Item
|
|
Start_time int64
|
|
Register_time int64
|
|
End_time int64
|
|
Send_type int
|
|
Mail_type int
|
|
To_uids []int
|
|
}
|
|
|
|
func (m *MailMgr) Init() {
|
|
m.key = MAIL_MGR_KEY
|
|
m.data = &MailData{
|
|
List: make(map[int][]*msg.Msg),
|
|
}
|
|
m.list = make(map[int]*ServerMail)
|
|
// 注册处理函数
|
|
m.init()
|
|
m.LoadMail(nil)
|
|
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_ADD, m.AddMail)
|
|
m.RegisterHandler(msg.HANDLE_TYPE_MAIL_RELOAD, m.LoadMail)
|
|
}
|
|
|
|
func (m *MailMgr) AddMail(msg *msg.Msg) (interface{}, error) {
|
|
ServerMail := msg.Extra.(*ServerMail)
|
|
m.list[ServerMail.Id] = ServerMail
|
|
return nil, nil
|
|
}
|
|
|
|
func (r *MailMgr) LoadMail(msg *msg.Msg) (interface{}, error) {
|
|
// 从数据库加载邮件
|
|
data := make([]*db.SqlServerMailStruct, 0)
|
|
err := db.GetServerMailData(&data)
|
|
if err != nil {
|
|
log.Error("LoadMail error: %v", err)
|
|
return nil, err
|
|
}
|
|
for _, v := range data {
|
|
Uids := make([]int, 0)
|
|
UidArr := strings.Split(v.To_uids, ",")
|
|
for _, v := range UidArr {
|
|
Uids = append(Uids, GoUtil.Int(v))
|
|
}
|
|
var items []interface{}
|
|
json.Unmarshal([]byte(v.Items), &items)
|
|
r.list[v.Id] = &ServerMail{
|
|
Id: v.Id,
|
|
Title: v.Title,
|
|
Content: v.Content,
|
|
TitleEn: v.TitleEn,
|
|
ContentEn: v.ContentEn,
|
|
Items: item.ParseItem(items),
|
|
Start_time: v.Start_time,
|
|
Register_time: v.Register_time,
|
|
End_time: v.End_time,
|
|
Mail_type: v.Mail_type,
|
|
Send_type: v.Send_type,
|
|
To_uids: Uids,
|
|
}
|
|
}
|
|
return nil, nil
|
|
}
|
|
|
|
func (r *MailMgr) Sync(Uid int, Register int64) []ServerMail {
|
|
// 同步邮件
|
|
Now := GoUtil.Now()
|
|
list := make([]ServerMail, 0)
|
|
for _, v := range r.list {
|
|
if v.Start_time > 0 && v.Start_time > Now {
|
|
continue
|
|
}
|
|
if v.End_time > 0 && v.End_time < Now {
|
|
continue
|
|
}
|
|
if v.Register_time > 0 && v.Register_time < Register {
|
|
continue
|
|
}
|
|
if v.Send_type == MAIL_SEND_TYPE_SERVER { //全服邮件
|
|
list = append(list, *v)
|
|
} else {
|
|
if GoUtil.InArray(Uid, v.To_uids) {
|
|
list = append(list, *v)
|
|
}
|
|
}
|
|
}
|
|
return list
|
|
}
|