From d7a39e963546373dbd9a6d1a7f2cf9581b5089f9 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 17 Feb 2025 11:16:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A5=BD=E5=8F=8B=E6=B6=88=E6=81=AF=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/FriendMgr.go | 37 +++++++++++++++++++--------- src/server/game/PlayerFunc.go | 8 ++++++ src/server/game/mod/friend/Friend.go | 9 +++++++ src/server/game/mod/msg/Msg.go | 2 ++ 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/src/server/game/FriendMgr.go b/src/server/game/FriendMgr.go index 87b9052f..b025a129 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/FriendMgr.go @@ -17,6 +17,7 @@ type FriendMgr struct { } type FirendData struct { + Id int64 List map[int][]*msg.Msg // 本服信箱 ClusterMsg map[int][]*msg.Msg // 集群信箱 } @@ -68,19 +69,31 @@ func (f *FriendMgr) getData() *FirendData { return f.data.(*FirendData) } +func (f *FriendMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) { + Now := GoUtil.Now() + for k, v := range f.getData().List { + for j, msg := range v { + if msg.End < Now-7*24*3600 { + f.getData().List[k] = append(f.getData().List[k][:j], f.getData().List[k][j+1:]...) + } + } + } + return nil, nil +} + // 通知玩家 func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) { + f.getData().Id++ + m.Id = f.getData().Id err := sendToPlayer(m) - if err != nil { - log.Debug("send to player error : %s\n", err) - ToServerId := GoUtil.GetServerIdByUid(m.To) - if ToServerId != conf.Server.ServerID { - f.getData().ClusterMsg[m.To] = append(f.getData().ClusterMsg[m.To], m) // 保存到集群消息 - } else { - f.getData().List[m.To] = append(f.getData().List[m.To], m) // 保存到本地消息 - } - f.update = true - return nil, err + if err == nil { + m.H = 1 + } + ToServerId := GoUtil.GetServerIdByUid(m.To) + if ToServerId != conf.Server.ServerID { + f.getData().ClusterMsg[m.To] = append(f.getData().ClusterMsg[m.To], m) // 保存到集群消息 + } else { + f.getData().List[m.To] = append(f.getData().List[m.To], m) // 保存到本地消息 } log.Debug("send to player success") return nil, nil @@ -89,7 +102,9 @@ func (f *FriendMgr) sendToPlayer(m *msg.Msg) (interface{}, error) { // 同步信息 func (f *FriendMgr) sync(m *msg.Msg) (interface{}, error) { data := f.getData().List[m.From] - f.getData().List[m.From] = make([]*msg.Msg, 0) + for _, v := range data { + v.H = 1 + } log.Debug("sync friendMgr msg to player %d success mailbox %v", m.From, data) return data, nil } diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index c367cf6d..73d72b33 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -288,6 +288,8 @@ func HandleFriendMsg(p *Player, m *msg.Msg) error { // 同步好友请求 func SyncFriendMsg(p *Player) { MsgList := G_GameLogicPtr.FriendMgrCall(&msg.Msg{Type: msg.HANDLE_TYPE_SYNC, From: int(p.M_DwUin)}) + FriendMod := p.PlayMod.getFriendMod() + MsgId := FriendMod.GetSyncId() if MsgList == nil { return } @@ -298,9 +300,15 @@ func SyncFriendMsg(p *Player) { sort.Slice(ml, func(i, j int) bool { return ml[i].SendT < ml[j].SendT }) + maxId := int64(0) for _, v := range ml { + if v.Id <= MsgId { + continue + } + maxId = max(maxId, v.Id) handle(p, v) } + FriendMod.SetSyncId(int64(maxId)) p.PlayMod.save() } diff --git a/src/server/game/mod/friend/Friend.go b/src/server/game/mod/friend/Friend.go index 6b5f84a9..d8e5cd16 100644 --- a/src/server/game/mod/friend/Friend.go +++ b/src/server/game/mod/friend/Friend.go @@ -13,6 +13,7 @@ type FriendMod struct { Card map[string]*card.CardInfo // 收到的申请交换 Log []*LogInfo // 日志 AutoId int + Id int64 // 已同步msg ID } const ( @@ -61,6 +62,14 @@ func (f *FriendMod) InitData() { } } +func (f *FriendMod) GetSyncId() int64 { + return f.Id +} + +func (f *FriendMod) SetSyncId(Id int64) { + f.Id = Id +} + func (f *FriendMod) AddFriend(id int) { f.FriendList[id] = struct{}{} delete(f.ApplyList, id) diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 62869c5b..1d159633 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -10,6 +10,8 @@ type Msg struct { SendT int64 // 发送时间 End int64 // 过期时间 Extra interface{} //额外信息 + Id int64 + H int //处理类型 } var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE}