refactor: 优化 server 包消息日志,移除 server.Conn.Reuse 函数(不合理)
This commit is contained in:
parent
5024022366
commit
376ff779e1
|
@ -143,21 +143,6 @@ func (slf *Conn) IsEmpty() bool {
|
||||||
return slf.ws == nil && slf.gn == nil && slf.kcp == nil && slf.gw == nil
|
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 获取远程地址
|
// RemoteAddr 获取远程地址
|
||||||
func (slf *Conn) RemoteAddr() net.Addr {
|
func (slf *Conn) RemoteAddr() net.Addr {
|
||||||
return slf.remoteAddr
|
return slf.remoteAddr
|
||||||
|
|
|
@ -2,9 +2,9 @@ package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/kercylan98/minotaur/utils/hash"
|
"github.com/kercylan98/minotaur/utils/hash"
|
||||||
|
"github.com/kercylan98/minotaur/utils/super"
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -85,6 +85,22 @@ func (slf *Message) MessageType() MessageType {
|
||||||
return slf.t
|
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 返回消息的字符串表示
|
// String 返回消息的字符串表示
|
||||||
func (slf *Message) String() string {
|
func (slf *Message) String() string {
|
||||||
var attrs = make([]any, 0, len(slf.attrs))
|
var attrs = make([]any, 0, len(slf.attrs))
|
||||||
|
@ -94,22 +110,8 @@ func (slf *Message) String() string {
|
||||||
}
|
}
|
||||||
attrs = append(attrs, attr)
|
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 返回消息类型的字符串表示
|
// String 返回消息类型的字符串表示
|
||||||
|
|
|
@ -623,7 +623,7 @@ func (slf *Server) dispatchMessage(msg *Message) {
|
||||||
defer func(msg *Message) {
|
defer func(msg *Message) {
|
||||||
if err := recover(); err != nil {
|
if err := recover(); err != nil {
|
||||||
stack := string(debug.Stack())
|
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)
|
fmt.Println(stack)
|
||||||
if e, ok := err.(error); ok {
|
if e, ok := err.(error); ok {
|
||||||
slf.OnMessageErrorEvent(msg, e)
|
slf.OnMessageErrorEvent(msg, e)
|
||||||
|
|
|
@ -21,6 +21,14 @@ func TestNew(t *testing.T) {
|
||||||
}
|
}
|
||||||
return true
|
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) {
|
srv.RegConnectionReceivePacketEvent(func(srv *server.Server, conn *server.Conn, packet []byte) {
|
||||||
conn.Write(packet)
|
conn.Write(packet)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue