refactor: 优化 server 包消息日志,移除 server.Conn.Reuse 函数(不合理)

This commit is contained in:
kercylan98 2023-09-08 15:20:24 +08:00
parent 5024022366
commit 376ff779e1
4 changed files with 27 additions and 32 deletions

View File

@ -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

View File

@ -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 返回消息类型的字符串表示

View File

@ -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)

View File

@ -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)
})