| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- package leagueMail
- import (
- actorRemote "f1-game/internal/actor_remote"
- "f1-game/internal/component/redis"
- nameRedis "f1-game/internal/name/redis"
- nameRoute "f1-game/internal/name/route"
- "f1-game/internal/pb"
- "f1-game/internal/sessions"
- "f1-game/internal/types"
- "f1-game/nodes/map/internal/db"
- dbLeague "f1-game/nodes/map/internal/db/data/league"
- mapFacade "f1-game/nodes/map/internal/facade"
- cstring "github.com/cherry-game/cherry/extend/string"
- clog "github.com/cherry-game/cherry/logger"
- cproto "github.com/cherry-game/cherry/net/proto"
- )
- func Service() *service {
- return &service{}
- }
- type service struct {
- mapFacade.LeagueServiceBase[*db.MapLeagueTable]
- }
- // 推送联盟邮件列表
- func (p *service) Push(leagueTable *db.MapLeagueTable, session *cproto.Session) {
- leagueMailTable, found := db.GetMapLeagueMailTable(leagueTable.LeagueID)
- if !found {
- return
- }
- var (
- playerID = sessions.GetPlayerID(session)
- pushMap = &pb.MailTypeList{
- List: []*pb.MailList{},
- }
- )
- for mailType, mailList := range leagueMailTable.MailMap {
- list := &pb.MailList{
- MailType: mailType,
- TopMailID: mailList.TopMailID,
- }
- for _, mail := range mailList.List {
- // 过滤删除邮件
- if mail.DelPlayerIDs.Contains(playerID) {
- continue
- }
- list.List = append(list.List, mail.ToProto(playerID))
- }
- pushMap.List = append(pushMap.List, list)
- }
- sessions.PushWithSession(session, nameRoute.PushLeagueMail_List, pushMap)
- }
- func (p *service) ChangePush(members []int64, mailType int32, topMailID int64, removeMailIDs []int64, addMails ...*dbLeague.LeagueMail) {
- if len(members) <= 0 {
- return
- }
- // 删除邮件
- if len(removeMailIDs) > 0 {
- removeResp := &pb.MailDelList{
- MailType: mailType,
- MailIDs: removeMailIDs,
- }
- sessions.PushPlayers(members, nameRoute.PushLeagueMail_Del, removeResp)
- }
- // 新增邮件
- if len(addMails) > 0 {
- addResp := &pb.MailList{
- MailType: mailType,
- TopMailID: topMailID,
- }
- for _, mail := range addMails {
- addResp.List = append(addResp.List, mail.ToProto(0))
- }
- sessions.PushPlayers(members, nameRoute.PushLeagueMail_New, addResp)
- }
- }
- // 给所有联盟成员推送邮件
- func (p *service) SendAllMemberMail(leagueID int64, mailID int32, assets types.Assets, params ...any) {
- p.SendMailWithPermission(leagueID, mailID, 0, assets, params...)
- }
- // 通过权限发送系统邮件
- // permission 0 发送给所有成员 否则具体权限联盟成员
- func (p *service) SendMailWithPermission(leagueID int64, mailID, permission int32, assets types.Assets, params ...any) {
- leagueMemberTable, found := db.GetMapLeagueMemberTable(leagueID)
- if !found {
- clog.Warnf("[SendMailWithPermission] leagueMemberTable not found. leagueID: %d, mailID: %d, permission: %d", leagueID, mailID, permission)
- return
- }
- var members []int64
- if permission <= 0 {
- members = leagueMemberTable.GetLeagueMemberIDs()
- } else {
- members = leagueMemberTable.GetMemberWithPermission(permission)
- }
- p.SendMailToMembers(leagueID, members, mailID, assets, params...)
- }
- // 发送系统邮件给联盟成员
- func (p *service) SendMailToMembers(leagueID int64, playerIDs []int64, mailID int32, assets types.Assets, params ...any) {
- if len(playerIDs) < 1 {
- return
- }
- playerGameNodeMap := redis.Game.GetPlayerDataMap(playerIDs, nameRedis.PlayerGameNodeFields...)
- if playerGameNodeMap == nil {
- clog.Warnf("[SendMailToMembers] player game node map fail.leagueID:%d, mailID:%d, playerIDs: %v", leagueID, mailID, playerIDs)
- return
- }
- var templateParams []string
- for _, param := range params {
- templateParams = append(templateParams, cstring.ToString(param))
- }
- for _, playerID := range playerIDs {
- playerData, found := playerGameNodeMap[playerID]
- if !found {
- clog.Warnf("[SendMailToMembers] player game node fail.leagueID:%d, mailID:%d, playerID: %v", leagueID, mailID, playerID)
- continue
- }
- // 发送邮件给联盟成员
- actorRemote.GameMail.SendMail(playerData.GameNodeID, playerID, mailID, assets, templateParams)
- }
- }
|