From 8c5b63a49aace4f887011edcc8c13c75e8f45d3c Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 1 Dec 2025 18:45:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E7=BE=A4=E6=9E=B6=E6=9E=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/server/cluster/ClusterFunc.go | 19 +++++++++++++------ src/server/game/FriendMgr.go | 9 +++++++++ src/server/game/Type.go | 1 + src/server/game/mod/msg/Msg.go | 1 + 5 files changed, 25 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index e65e11c5..fea300b4 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ src/server/unit_test.go src/server/teLog/* src/server/teLog/log.2024-11-28 src/server/logs/ga_log/*.log +src/server/conf/server.json diff --git a/src/server/cluster/ClusterFunc.go b/src/server/cluster/ClusterFunc.go index b610540b..1e1ef822 100644 --- a/src/server/cluster/ClusterFunc.go +++ b/src/server/cluster/ClusterFunc.go @@ -127,6 +127,13 @@ func SendServerMsg(m *msg.Msg, serverId int) error { func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) { m.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Cluster Msg", m)) + + // 先注册回调通道,避免发送出去后对方快速返回导致丢失 + newChan := make(chan *msg.Msg, 1) + registerChanel(m.UniKey, newChan) + defer unregisterChanel(m.UniKey) + + // 之后再发送消息 if v, ok := serverAgent.Load(serverId); ok { data, err := GoUtil.GobMarshal(m) if err != nil { @@ -134,14 +141,14 @@ func CallServerMsg(m *msg.Msg, serverId int) (*msg.Msg, error) { return nil, err } v.(network.Agent).WriteMsg(data) + } else { + return nil, fmt.Errorf("server %d not online", serverId) } - newChan := make(chan *msg.Msg, 1) - registerChanel(m.UniKey, newChan) + + // 等待返回(直接接收一次) timeout := time.After(15 * time.Second) select { - case <-newChan: - backm := <-newChan - unregisterChanel(m.UniKey) + case backm := <-newChan: if backm == nil { return nil, fmt.Errorf("server %d not response", serverId) } @@ -169,8 +176,8 @@ func processMsg(a *Agent, m *msg.Msg) error { if m.UniKey != "" { if chanel, ok := CallbackChan[m.UniKey]; ok { chanel <- m + return nil } - return nil } if fun, ok := FuncMap[m.Type]; ok { err = fun(a, m) diff --git a/src/server/game/FriendMgr.go b/src/server/game/FriendMgr.go index b571cc37..97bfa892 100644 --- a/src/server/game/FriendMgr.go +++ b/src/server/game/FriendMgr.go @@ -92,6 +92,7 @@ func (f *FriendMgr) Init() { f.RegisterHandler(msg.HANDLE_TYPE_VAR_EXPIRE_SET, f.SetExpireVarData) f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_LOGIN, f.SendMsgToCenter) + f.RegisterHandler(msg.HANDLE_TYPE_CHAMPSHIP_INRANK, f.SendMsgToCenter) } func (f *FriendMgr) getData() *FirendData { @@ -275,3 +276,11 @@ func FriendMgrCall(m *msg.Msg) interface{} { } return G_GameLogicPtr.FriendMgrCall(m.Clone()) } + +func SendMsgToCenter(m *msg.Msg) error { + return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) +} + +func CallMsgToCenter(m *msg.Msg) (interface{}, error) { + return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) +} diff --git a/src/server/game/Type.go b/src/server/game/Type.go index 9ff8994d..31200159 100644 --- a/src/server/game/Type.go +++ b/src/server/game/Type.go @@ -110,4 +110,5 @@ func init() { gob.Register(&GameResult{}) gob.Register(&CatnipMsg{}) gob.Register(&CatnipLock{}) + gob.Register(CRank{}) } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 269987be..a5a1c4ba 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -110,6 +110,7 @@ const ( HANDLE_TYPE_CHAMPSHIP_LOGIN // 锦标赛登录 HANDLE_TYPE_CHAMPSHIP_RANK_INFO // 锦标赛排名信息 + HANDLE_TYPE_CHAMPSHIP_MY_RANK // 锦标赛我的排名 )