From 7d2aef248388b594e939c5627e4440aecabf55f5 Mon Sep 17 00:00:00 2001 From: 575560454 <575560454@qq.com> Date: Tue, 15 Jul 2025 13:51:10 +0000 Subject: [PATCH] =?UTF-8?q?refactor(common):=20=E4=BC=98=E5=8C=96=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=92=8CRPC=E6=A8=A1=E5=9D=97=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=94=A8=E6=88=B7=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=B1=BB=E5=9E=8B=E4=B8=BAuint16?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/data/cache/cache.go | 10 +++---- common/go.mod | 3 +- common/go.sum | 3 ++ common/rpc/rpc.go | 55 +++++++++------------------------- common/serialize/log/go.mod | 2 +- logic/controller/controller.go | 2 +- 6 files changed, 25 insertions(+), 50 deletions(-) diff --git a/common/data/cache/cache.go b/common/data/cache/cache.go index f96d4d8f6..4ad39fc01 100644 --- a/common/data/cache/cache.go +++ b/common/data/cache/cache.go @@ -35,8 +35,8 @@ func NewSessionStore() *CacheStore[uint32] { } // NewUserOnlineStore 创建用户在线状态缓存实例 -func NewUserOnlineStore() *CacheStore[uint32] { - return &CacheStore[uint32]{ +func NewUserOnlineStore() *CacheStore[uint16] { + return &CacheStore[uint16]{ manager: cool.CacheManager, prefix: "blazing:useronline:", } @@ -129,7 +129,7 @@ func (s *CacheStore[T]) GetOrSet(ctx context.Context, key string, defaultValue T // SessionManager 会话管理器 type SessionManager struct { sessionStore *CacheStore[uint32] // 会话缓存 - userOnlineStore *CacheStore[uint32] // 用户在线状态缓存 + userOnlineStore *CacheStore[uint16] // 用户在线状态缓存 } // NewSessionManager 创建会话管理器 @@ -161,12 +161,12 @@ func (m *SessionManager) SessionExists(sessionID string) (bool, error) { } // SetUserOnline 设置用户在线状态 -func (m *SessionManager) SetUserOnline(userID uint32, serverID uint32) error { +func (m *SessionManager) SetUserOnline(userID uint32, serverID uint16) error { return m.userOnlineStore.Set(gctx.New(), gconv.String(userID), serverID, 0) } // GetUserOnline 获取用户在线状态 -func (m *SessionManager) GetUserOnline(userID uint32) (uint32, error) { +func (m *SessionManager) GetUserOnline(userID uint32) (uint16, error) { return m.userOnlineStore.Get(context.Background(), gconv.String(userID)) } diff --git a/common/go.mod b/common/go.mod index 067e7af9a..9deae1276 100644 --- a/common/go.mod +++ b/common/go.mod @@ -20,7 +20,6 @@ require ( require ( github.com/antchfx/xmlquery v1.4.4 // indirect github.com/antchfx/xpath v1.3.3 // indirect - github.com/apcera/termtables v0.0.0-20170405184538-bcbc5dc54055 // indirect github.com/bits-and-blooms/bitset v1.5.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect @@ -58,7 +57,7 @@ require ( github.com/mattn/go-runewidth v0.0.15 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/panjf2000/ants/v2 v2.11.3 // indirect - github.com/panjf2000/gnet/v2 v2.5.0 // indirect + github.com/panjf2000/gnet/v2 v2.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/tnnmigga/enum v1.0.2 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect diff --git a/common/go.sum b/common/go.sum index 004250e70..46a6b428f 100644 --- a/common/go.sum +++ b/common/go.sum @@ -86,6 +86,8 @@ github.com/panjf2000/gnet v1.6.7 h1:zv1k6kw80sG5ZQrLpbbFDheNCm50zm3z2e3ck5GwMOM= github.com/panjf2000/gnet v1.6.7/go.mod h1:KcOU7QsCaCBjeD5kyshBIamG3d9kAQtlob4Y0v0E+sc= github.com/panjf2000/gnet/v2 v2.5.0 h1:nJOJ+SK+MeFN4+6zNgxPRU88BbH7SAMf9wu7nw6mGz4= github.com/panjf2000/gnet/v2 v2.5.0/go.mod h1:R+X5M5YBpOGMVP/92OJ02P35SbmoHjiL7GnaBhht6GE= +github.com/panjf2000/gnet/v2 v2.9.1 h1:bKewICy/0xnQ9PMzNaswpe/Ah14w1TrRk91LHTcbIlA= +github.com/panjf2000/gnet/v2 v2.9.1/go.mod h1:WQTxDWYuQ/hz3eccH0FN32IVuvZ19HewEWx0l62fx7E= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -179,6 +181,7 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= diff --git a/common/rpc/rpc.go b/common/rpc/rpc.go index 138c16453..f3644c3a7 100644 --- a/common/rpc/rpc.go +++ b/common/rpc/rpc.go @@ -1,6 +1,7 @@ package rpc import ( + "blazing/common/data/cache" "context" "fmt" "log" @@ -11,24 +12,24 @@ import ( const rpcaddr = "127.0.0.1:40000" -var clientmap = make(map[int]*ClientHandler) //客户端map -var usermap = make(map[int]int) //用户->客户端的map +var clientmap = make(map[uint16]*ClientHandler) //客户端map +//var usermap = make(map[int]int) //用户->客户端的map // Define the client handler interface type ClientHandler struct { - KickPerson func(int) error //踢人,这里是返回具体的logic - QuitSelf func(int) error //关闭服务器进程 + KickPerson func(uint32) error //踢人,这里是返回具体的logic + QuitSelf func(int) error //关闭服务器进程 } // Define the server handler type ServerHandler struct{} // 实现踢人 -func (h *ServerHandler) Kick(ctx context.Context, userid int) error { +func (h *ServerHandler) Kick(ctx context.Context, userid uint32) error { - useid1, ok := usermap[userid] + useid1, err := cache.NewSessionManager().GetUserOnline(userid) - if !ok { + if err != nil { return fmt.Errorf("user not found") } @@ -43,21 +44,8 @@ func (h *ServerHandler) Kick(ctx context.Context, userid int) error { //return nil } -// 退出指定服务器 -// func (h *ServerHandler) Quit(ctx context.Context, portid int) error { - -// a, ok := clientmap[portid] - -// if ok && a != nil { -// a.QuitSelf(0) -// } -// //clientmap[portid].QuitSelf(0) -// return nil - -// } - // 注册logic服务器 -func (h *ServerHandler) RegisterLogic(ctx context.Context, port int) error { +func (h *ServerHandler) RegisterLogic(ctx context.Context, port uint16) error { //TODO 待修复滚动更新可能导致的玩家可以同时在旧服务器和新服务器同时在线的bug revClient, ok := jsonrpc.ExtractReverseClient[ClientHandler](ctx) if !ok { @@ -73,21 +61,6 @@ func (h *ServerHandler) RegisterLogic(ctx context.Context, port int) error { } -// 用户登录事件 -func (h *ServerHandler) UserLogin(ctx context.Context, port int, userid int) error { - - usermap[userid] = port - return nil - -} - -// 用户登出事件 -func (h *ServerHandler) UserLogout(ctx context.Context, port int, userid int) error { - delete(usermap, userid) - return nil - -} - func StartServer() { // create a new server instance rpcServer := jsonrpc.NewServer(jsonrpc.WithReverseClient[ClientHandler]("")) @@ -105,9 +78,9 @@ func StartServer() { var closer jsonrpc.ClientCloser func StartClient(port uint16, callback any) *struct { - Kick func(int32) error + Kick func(uint32) error - RegisterLogic func(int32) error + RegisterLogic func(uint16) error } { closer1, err := jsonrpc.NewMergeClient(context.Background(), "ws://"+rpcaddr, "", []interface{}{ @@ -118,7 +91,7 @@ func StartClient(port uint16, callback any) *struct { } if port != 0 { //注册logic - RPCClient.RegisterLogic(int32(port)) + RPCClient.RegisterLogic(port) } @@ -135,9 +108,9 @@ func CloseClient() { // Setup RPCClient with reverse call handler var RPCClient struct { - Kick func(int32) error //踢人 + Kick func(uint32) error //踢人 - RegisterLogic func(int32) error //注册服务器消息 + RegisterLogic func(uint16) error //注册服务器消息 // UserLogin func(int32, int32) error //用户登录事件 // UserLogout func(int32, int32) error //用户登出事件 diff --git a/common/serialize/log/go.mod b/common/serialize/log/go.mod index b49885e10..302f840e6 100644 --- a/common/serialize/log/go.mod +++ b/common/serialize/log/go.mod @@ -4,5 +4,5 @@ go 1.20 require ( github.com/mattn/go-runewidth v0.0.3-0.20170201023540-14207d285c6c - github.com/scylladb/termtables v1.0.0 + //github.com/scylladb/termtables v1.0.0 ) diff --git a/logic/controller/controller.go b/logic/controller/controller.go index fde5ff28e..f34c3bdaf 100644 --- a/logic/controller/controller.go +++ b/logic/controller/controller.go @@ -22,7 +22,7 @@ import ( var Maincontroller = NewController() //注入service // 分发cmd逻辑实现Controller type Controller struct { - Port uint32 + Port uint16 RPCClient struct { Kick func(int32) error