From 3cc3af2aff1ee19d4d32d76d45eccc658940e1e0 Mon Sep 17 00:00:00 2001 From: hahwu <31872165+hahwu@users.noreply.github.com> Date: Mon, 13 Apr 2026 14:49:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E6=B6=88=E6=81=AF=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/conf/server.json | 2 +- src/server/game/GameLogic.go | 3 +++ src/server/game/proto_factory.go | 29 +++++++++++++++------------ src/server/unit_test/playroom_test.go | 18 +++++++++++++++++ 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/server/conf/server.json b/src/server/conf/server.json index 25ea9004..38770d42 100644 --- a/src/server/conf/server.json +++ b/src/server/conf/server.json @@ -2,7 +2,7 @@ "AppID": 0, "LogLevel": "debug", "LogPath": "./log", - "TCPAddr": ":3602", + "TCPAddr": ":3601", "WSAddr": ":3567", "RPCAddr": ":50051", "MySqlAddr": "127.0.0.1", diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index b9b1195b..77340de3 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -98,6 +98,9 @@ func buildNewMsgHandlerAdapter(value interface{}) (func(*Player, *thrift.TStruct return nil, fmt.Errorf("second arg must be *thrift.TStruct or pointer type implementing thrift.TStruct") } + // 注册具体的 thrift 消息类型到全局缓存 + registerThriftType(msgArgType) + return func(player *Player, msg *thrift.TStruct) error { if msg == nil || *msg == nil { return fmt.Errorf("nil thrift message") diff --git a/src/server/game/proto_factory.go b/src/server/game/proto_factory.go index 262eed67..ee40908c 100644 --- a/src/server/game/proto_factory.go +++ b/src/server/game/proto_factory.go @@ -32,21 +32,24 @@ func buildProtoMessageTypeCache() { }) } +func registerThriftType(msgType reflect.Type) { + if msgType == nil || msgType.Kind() != reflect.Ptr { + return + } + elemType := msgType.Elem() + if elemType.Name() != "" { + thriftMessageTypeByName.Store(elemType.Name(), msgType) + } + thriftMessageTypeByName.Store(msgType.String(), msgType) + thriftMessageTypeByName.Store(elemType.String(), msgType) + if elemType.PkgPath() != "" && elemType.Name() != "" { + thriftMessageTypeByName.Store(elemType.PkgPath()+"."+elemType.Name(), msgType) + } +} + func buildThriftMessageTypeCache() { msg.Processor.Range(func(_ uint16, msgType reflect.Type) { - if msgType == nil || msgType.Kind() != reflect.Ptr { - return - } - - elemType := msgType.Elem() - if elemType.Name() != "" { - thriftMessageTypeByName.Store(elemType.Name(), msgType) - } - thriftMessageTypeByName.Store(msgType.String(), msgType) - thriftMessageTypeByName.Store(elemType.String(), msgType) - if elemType.PkgPath() != "" && elemType.Name() != "" { - thriftMessageTypeByName.Store(elemType.PkgPath()+"."+elemType.Name(), msgType) - } + registerThriftType(msgType) }) } diff --git a/src/server/unit_test/playroom_test.go b/src/server/unit_test/playroom_test.go index 80c563d0..7d8a91b7 100644 --- a/src/server/unit_test/playroom_test.go +++ b/src/server/unit_test/playroom_test.go @@ -1,6 +1,8 @@ package unit import ( + "fmt" + "go/importer" "server/game" "testing" ) @@ -11,3 +13,19 @@ func TestPlayroomVisit(t *testing.T) { player.InitPlayerOnly() player.GetVisitorPlayer() } + +func TestFlect(t *testing.T) { + pkgPath := "server/msg/meowmentnet" + pkg, err := importer.Default().Import(pkgPath) + if err != nil { + fmt.Printf("failed to import package %s: %v\n", pkgPath, err) + return + } + for _, name := range pkg.Scope().Names() { + obj := pkg.Scope().Lookup(name) + if obj == nil { + continue + } + fmt.Printf("name %s, obj name %s\n", name, obj.Type()) + } +}