| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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"
- 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) 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)
- }
- }
|