From 9b08cdebe6d7ff97c73bd225d5caf28e3cc8ebda Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:10:45 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9E=B6=E6=9E=84=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=911.var=E5=88=A0=E9=99=A4=E5=86=97=E4=BD=99=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=EF=BC=9B2.champship=E5=A2=9E=E5=8A=A0redis=E7=BC=93?= =?UTF-8?q?=E5=AD=98=EF=BC=8C=E5=A2=9E=E5=8A=A0=E8=AF=BB=E5=86=99=E9=94=81?= =?UTF-8?q?=EF=BC=9B3.message=E8=BF=87=E6=BB=A4=E8=BF=87=E6=9C=9F=E6=B6=88?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E5=88=A0=E9=99=A4=E7=A9=BA=E4=BF=A1=E7=AE=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/game/champship_mgr.go | 4 +-- src/server/game/message_mgr.go | 24 ++++++++++++++++-- src/server/game/var_mgr.go | 42 ++++++++++++++++++++------------ 3 files changed, 51 insertions(+), 19 deletions(-) diff --git a/src/server/game/champship_mgr.go b/src/server/game/champship_mgr.go index e1cf33a6..7332ba83 100644 --- a/src/server/game/champship_mgr.go +++ b/src/server/game/champship_mgr.go @@ -850,8 +850,8 @@ func (c *ChampshipMgr) SetRankCache(Uid int) { PreGroupId := c.getData().PreGroupInfo[Uid] GroupId := c.getData().GroupInfo[Uid] key := fmt.Sprintf("champship_rank_cache_%d", Uid) - log.Debug("GetRankCache key:%s; data:%s", key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId)) - db.RedisSetKey(key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId), 86400*2) + log.Debug("SetRankCache key:%s; data:%s", key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId)) + db.RedisSetKey(key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId), time.Second*172800) } func GetRankCache(Uid int) (int, int, int, int) { diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index dea2036f..fe2ca92a 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -132,6 +132,7 @@ func FixBug() { // 先更新 PlayerList(需要加锁) messageMgrData.mu.Lock() defer messageMgrData.mu.Unlock() + now := GoUtil.Now() for k, v := range messageMgrData.MessageList { if k < 100000 { delete(messageMgrData.MessageList, k) @@ -139,11 +140,14 @@ func FixBug() { } // 反向遍历以安全删除元素 for i := len(v.Messages) - 1; i >= 0; i-- { - if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY { + if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) { // 删除消息 v.Messages = append(v.Messages[:i], v.Messages[i+1:]...) } } + if len(v.Messages) == 0 { + delete(messageMgrData.MessageList, k) + } } } @@ -175,7 +179,7 @@ func (m *MessageMgr) CenterRegister() { m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, MessageHandlerFunc(ChampshipRankInfoHandler)) m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_LIST, MessageHandlerFunc(ChampshipRankListHandler)) m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_PRE_RANK, MessageHandlerFunc(ChampshipRankPreHandler)) - m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_GROUP, MessageHandlerFunc(ChampshipInRankHandler)) + m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_GROUP, MessageHandlerFunc(ChampshipGroupHandler)) } } @@ -295,6 +299,15 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { messages := getMessge(int64(data.From)) messages.mu.Lock() // 复制消息列表,避免在锁内发送消息 + // 过滤过期消息 + now := GoUtil.Now() + validMessages := make([]*msg.Msg, 0, len(messages.Messages)) + for _, message := range messages.Messages { + if message.End == 0 || message.End >= now { + validMessages = append(validMessages, message) + } + } + messages.Messages = validMessages messagesToSend := make([]*msg.Msg, len(messages.Messages)) copy(messagesToSend, messages.Messages) messages.mu.Unlock() @@ -935,5 +948,12 @@ func deleteMessage(m *msg.Msg) error { messages.Messages[len(messages.Messages)-1] = nil // 清除最后一个元素的引用 messages.Messages = messages.Messages[:len(messages.Messages)-1] } + if len(messages.Messages) == 0 { + // 如果消息列表为空,则删除该玩家的消息列表 + messageMgrData := getMessageData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + delete(messageMgrData.MessageList, int64(m.To)) + } return nil } diff --git a/src/server/game/var_mgr.go b/src/server/game/var_mgr.go index ca08ce94..ee2b5ed2 100644 --- a/src/server/game/var_mgr.go +++ b/src/server/game/var_mgr.go @@ -59,12 +59,31 @@ func (f *VarMgr) Init() { if f.getData().ZeroTime == GoUtil.ZeroTimestamp() { f.ZeroUpdate() } - f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() { f.ZeroUpdate() }) } +func (f *VarMgr) fixbug() { + data := f.getData() + data.mu.Lock() + defer data.mu.Unlock() + for k, v := range data.NewUseVar { + if v != nil { + del := true + for _, ved := range v { + if ved.D.(int) != 0 { + del = false + } + } + if del { + delete(data.NewUseVar, k) + } + + } + } +} + func (f *VarMgr) version() { switch v := f.getData().Version; v { case 0: @@ -84,6 +103,10 @@ func (f *VarMgr) version() { } } f.getData().Version = 1 + case 1: + // future version update + f.fixbug() // 修复用户变量冗余数据 + f.getData().Version = 2 } } @@ -148,7 +171,7 @@ func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData { varData := f.getData().NewUseVar[uid] if varData == nil { varData = make(map[string]*VarExpireData) - f.getData().NewUseVar[uid] = varData + //f.getData().NewUseVar[uid] = varData } ved, ok := varData[key] if !ok { @@ -165,19 +188,6 @@ func (f *VarMgr) SetVar(key string, value interface{}) { SaveCacheVarData(key, f.getData().NewVar[key]) } -func (f *VarMgr) GetVar(key string) *VarExpireData { - if v, ok := f.getData().NewVar[key]; ok { - return v - } - data := &VarExpireData{} - f.getData().NewVar[key] = data - return data -} - -func (f *VarMgr) DelVar(key string) { - delete(f.getData().Var, key) -} - func (f *VarMgr) getData() *VarData { return f.data.(*VarData) } @@ -227,6 +237,8 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) { func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) { data := getVarData() + data.mu.Lock() + defer data.mu.Unlock() userVar := &VarExpireData{} if v, ok := m.Extra.(msg.VarData); ok { if varData, ok := data.NewUseVar[m.From]; ok {