From 376ff779e129f2ced628f48e4cffdad507def19d Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Fri, 8 Sep 2023 15:20:24 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20server=20?= =?UTF-8?q?=E5=8C=85=E6=B6=88=E6=81=AF=E6=97=A5=E5=BF=97=EF=BC=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20server.Conn.Reuse=20=E5=87=BD=E6=95=B0=EF=BC=88?= =?UTF-8?q?=E4=B8=8D=E5=90=88=E7=90=86=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/conn.go | 15 --------------- server/message.go | 34 ++++++++++++++++++---------------- server/server.go | 2 +- server/server_test.go | 8 ++++++++ 4 files changed, 27 insertions(+), 32 deletions(-) diff --git a/server/conn.go b/server/conn.go index 3437d83..3f97832 100644 --- a/server/conn.go +++ b/server/conn.go @@ -143,21 +143,6 @@ func (slf *Conn) IsEmpty() bool { return slf.ws == nil && slf.gn == nil && slf.kcp == nil && slf.gw == nil } -// Reuse 重用连接 -// - 重用连接时,会将当前连接的数据复制到新连接中 -// - 通常在于连接断开后,重新连接时使用 -func (slf *Conn) Reuse(conn *Conn) { - slf.Close() - slf.remoteAddr = conn.remoteAddr - slf.ip = conn.ip - slf.ws = conn.ws - slf.gn = conn.gn - slf.kcp = conn.kcp - slf.data = conn.data - slf.packetPool = conn.packetPool - slf.packets = conn.packets -} - // RemoteAddr 获取远程地址 func (slf *Conn) RemoteAddr() net.Addr { return slf.remoteAddr diff --git a/server/message.go b/server/message.go index 3a2f5c2..dbd701e 100644 --- a/server/message.go +++ b/server/message.go @@ -2,9 +2,9 @@ package server import ( "context" - "encoding/json" "fmt" "github.com/kercylan98/minotaur/utils/hash" + "github.com/kercylan98/minotaur/utils/super" "reflect" ) @@ -85,6 +85,22 @@ func (slf *Message) MessageType() MessageType { return slf.t } +// AttrsString 返回消息属性的字符串表示 +func (slf *Message) AttrsString() string { + var attrs = make([]any, 0, len(slf.attrs)) + for _, attr := range slf.attrs { + if tof := reflect.TypeOf(attr); tof.Kind() == reflect.Func { + attrs = append(attrs, tof.String()) + continue + } + attrs = append(attrs, attr) + } + if len(attrs) == 0 { + return "NoneAttr" + } + return string(super.MarshalJSON(attrs)) +} + // String 返回消息的字符串表示 func (slf *Message) String() string { var attrs = make([]any, 0, len(slf.attrs)) @@ -94,22 +110,8 @@ func (slf *Message) String() string { } attrs = append(attrs, attr) } - var s string - switch slf.t { - case MessageTypePacket: - if len(attrs) > 1 { - s = messagePacketVisualization(attrs[1].([]byte)) - } - default: - if len(slf.attrs) == 0 { - s = "NoneAttr" - } else { - raw, _ := json.Marshal(attrs) - s = string(raw) - } - } - return fmt.Sprintf("[%s] %s", slf.t, s) + return fmt.Sprintf("[%s] %s", slf.t, slf.AttrsString()) } // String 返回消息类型的字符串表示 diff --git a/server/server.go b/server/server.go index d682d97..f91e000 100644 --- a/server/server.go +++ b/server/server.go @@ -623,7 +623,7 @@ func (slf *Server) dispatchMessage(msg *Message) { defer func(msg *Message) { if err := recover(); err != nil { stack := string(debug.Stack()) - log.Error("Server", log.String("MessageType", messageNames[msg.t]), log.Any("MessageAttrs", msg.attrs), log.Any("error", err), log.String("stack", stack)) + log.Error("Server", log.String("MessageType", messageNames[msg.t]), log.Any("MessageAttrs", msg.AttrsString()), log.Any("error", err), log.String("stack", stack)) fmt.Println(stack) if e, ok := err.(error); ok { slf.OnMessageErrorEvent(msg, e) diff --git a/server/server_test.go b/server/server_test.go index d7ca8b1..8d0032c 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -21,6 +21,14 @@ func TestNew(t *testing.T) { } return true }) + var current *server.Conn + srv.RegConnectionOpenedEvent(func(srv *server.Server, conn *server.Conn) { + if current != nil { + current.Reuse(conn) + } else { + current = conn + } + }) srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) { conn.Write(packet) })