feat: 支持通过 server.SetMessagePacketVisualizer 函数设置服务器数据包消息可视化函数

This commit is contained in:
kercylan98 2023-07-13 10:30:35 +08:00
parent a661da790c
commit 676b542943
1 changed files with 25 additions and 5 deletions

View File

@ -41,6 +41,12 @@ var messageErrorActionNames = map[MessageErrorAction]string{
MessageErrorActionShutdown: "Shutdown",
}
var (
messagePacketVisualization = func(packet []byte) string {
return string(packet)
}
)
type (
// MessageType 消息类型
MessageType byte
@ -59,6 +65,7 @@ type Message struct {
attrs []any // 消息属性
}
// String 返回消息的字符串表示
func (slf *Message) String() string {
var attrs = make([]any, 0, len(slf.attrs))
for _, attr := range slf.attrs {
@ -68,16 +75,22 @@ func (slf *Message) String() string {
attrs = append(attrs, attr)
}
var s string
if len(slf.attrs) == 0 {
s = "NoneAttr"
} else {
raw, _ := json.Marshal(attrs)
s = string(raw)
switch slf.t {
case MessageTypePacket:
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)
}
// String 返回消息类型的字符串表示
func (slf MessageType) String() string {
return messageNames[slf]
}
@ -132,3 +145,10 @@ func PushAsyncMessage(srv *Server, caller func() error, callback func(err error)
msg.attrs = append([]any{caller, callback}, mark...)
srv.pushMessage(msg)
}
// SetMessagePacketVisualizer 设置消息可视化函数
// - 消息可视化将在慢消息等情况用于打印,使用自定消息可视化函数可以便于开发者进行调试
// - 默认的消息可视化函数将直接返回消息的字符串表示
func SetMessagePacketVisualizer(handle func(packet []byte) string) {
messagePacketVisualization = handle
}