From 05cccd3e9a6d7ec2c25749b726bf504db53f0029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=B7=E5=8B=87?= Date: Thu, 21 Sep 2023 19:10:28 +0800 Subject: [PATCH] save --- server/imserver/chatmgr.go | 32 +++++++++++++++++++++++++++----- server/imserver/player.go | 22 +++++++++++++++++++++- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/server/imserver/chatmgr.go b/server/imserver/chatmgr.go index 82bb498b..c9a07670 100644 --- a/server/imserver/chatmgr.go +++ b/server/imserver/chatmgr.go @@ -17,7 +17,8 @@ type ChatMgr struct { worldMsgId uint64 guildMsgId uint64 - tmpMsgId uint64 + teamMsgId uint64 + //tmpMsgId uint64 } func NewChatMgr(pm *PlayerMgr, fm *FriendsMgr, gm *GuildMgr) *ChatMgr { @@ -32,7 +33,7 @@ func NewChatMgr(pm *PlayerMgr, fm *FriendsMgr, gm *GuildMgr) *ChatMgr { // Default values cm.worldMsgId = 1000 cm.guildMsgId = 1000 - cm.tmpMsgId = 1000 + cm.teamMsgId = 1000 return cm } @@ -118,9 +119,9 @@ func (cm *ChatMgr) ProcGuildChat(p *Player, msg *cs.CMSendChatMsg) { if msgRec, exists := cm.guildMsgRec[guildId]; exists { msgRec.AddChatMsg(chatMsg) } else { - msgRec := &ChatMsgRec{} - msgRec.CurrID = cm.guildMsgId - cm.guildMsgRec[guildId] = msgRec + cm.guildMsgRec[guildId] = &ChatMsgRec{ + CurrID: cm.guildMsgId, + } } // TraverseMember @@ -132,6 +133,27 @@ func (cm *ChatMgr) ProcGuildChat(p *Player, msg *cs.CMSendChatMsg) { } } +func (cm *ChatMgr) ProcTeamChat(p *Player, msg *cs.CMSendChatMsg) { + chatMsg := new(cs.MFChatMsg) + cm.teamMsgId++ + cm.FillMFChatMsg(chatMsg, p, cm.teamMsgId, *msg.ChatChannel, *msg.MsgType, msg.MsgBody) + + notifyMsg := &cs.SMChatMsgNotify{} + notifyMsg.MsgList = append(notifyMsg.MsgList, chatMsg) + + // Traverse msg members + for _, accountId := range msg.GetMembers() { + p2 := cm.pm.GetPlayerByAccountId(accountId) + if p2 != nil { + continue + } + p2.SendMsg(notifyMsg) + if p2.chatChannel == kCCTeam { + // p2.SyncPrivateChatRedPoint() + } + } +} + func (cm *ChatMgr) ProcPrivateChat(p *Player, msg *cs.CMSendChatMsg) { targetAccountId := msg.GetTargetAccountId() if p.accountId == targetAccountId { diff --git a/server/imserver/player.go b/server/imserver/player.go index cb31a06b..975e73d8 100644 --- a/server/imserver/player.go +++ b/server/imserver/player.go @@ -257,13 +257,14 @@ func (p *Player) CMSendChatMsg(hdr *f5.MsgHdr, msg *cs.CMSendChatMsg) { chatMgr.ProcPrivateChat(p, msg) case kCCGuild: chatMgr.ProcGuildChat(p, msg) + case kCCTeam: + chatMgr.ProcTeamChat(p, msg) default: return } } func (p *Player) SyncPrivateChatRedPoint() { - //rspMsg := &cs.SMDeleteFriendShip{} msg := &cs.SMUpdatePrivateChatRedPointNotify{} chatMgr.FillSMUpdatePrivateChatRedPointNotify(p, msg) } @@ -277,6 +278,25 @@ func (p *Player) CMReadMsgAndOpenChatNotify(hdr *f5.MsgHdr, msg *cs.CMReadMsgAnd if p.chatChannel == kCCPrivate { p.SyncPrivateChatRedPoint() } + + // lastIds [{key:1, value:0}, {key:1, value:0}, ] + for _, v := range msg.GetLastIds() { + chatChannel := q5.ToInt32(v.GetKey()) + if !IsValidChatChannel(chatChannel) { + continue + } + chatChannelLastId := uint64(v.GetValue()) + switch chatChannel { + case kCCWorld: + p.worldChannelLastId = chatChannelLastId + chatMgr.SyncWorldChatMsg(p) + case kCCGuild: + p.guildChannelLastId = chatChannelLastId + chatMgr.SyncGuildChatMsg(p) + default: + break + } + } } // CMSetCurrPrivateChatTarget 设置当前私聊目标