From 1e6974ae4be51239e07a0c69091bf45506d2525a Mon Sep 17 00:00:00 2001 From: kercylan98 Date: Fri, 7 Jul 2023 19:03:19 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=AF=B9=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A2=9E=E5=8A=A0=20mark=20=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E5=9C=A8=E6=89=A7=E8=A1=8C=20Message.String(?= =?UTF-8?q?)=20=E5=87=BD=E6=95=B0=E6=97=B6=E8=BF=9B=E8=A1=8C=E5=B1=95?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/conn_readonly.go | 2 +- server/message.go | 40 ++++++++++++++++++++++++++++++---------- server/options.go | 2 +- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/server/conn_readonly.go b/server/conn_readonly.go index b5bafea..3a88ed2 100644 --- a/server/conn_readonly.go +++ b/server/conn_readonly.go @@ -7,7 +7,7 @@ import ( type ConnReadonly interface { RemoteAddr() net.Addr GetID() string - GetIP() string // GetData 获取连接数据 + GetIP() string GetData(key any) any IsWebsocket() bool } diff --git a/server/message.go b/server/message.go index 162d7cb..924b635 100644 --- a/server/message.go +++ b/server/message.go @@ -1,6 +1,10 @@ package server import ( + "encoding/json" + "fmt" + "github.com/kercylan98/minotaur/utils/str" + "reflect" "runtime/debug" ) @@ -56,32 +60,48 @@ type Message struct { attrs []any } +func (slf *Message) String() string { + var attrs = make([]any, 0, len(slf.attrs)) + for _, attr := range slf.attrs { + if reflect.TypeOf(attr).Kind() == reflect.Func { + continue + } + attrs = append(attrs, attr) + } + raw, _ := json.Marshal(attrs) + s := string(raw) + if s == str.None { + s = "NoneAttr" + } + return fmt.Sprintf("[%s] %s", slf.t, s) +} + func (slf MessageType) String() string { return messageNames[slf] } // PushPacketMessage 向特定服务器中推送 MessageTypePacket 消息 -func PushPacketMessage(srv *Server, conn *Conn, packet []byte) { +func PushPacketMessage(srv *Server, conn *Conn, packet []byte, mark ...any) { msg := srv.messagePool.Get() msg.t = MessageTypePacket - msg.attrs = []any{conn, packet} + msg.attrs = append([]any{conn, packet}, mark...) srv.pushMessage(msg) } // PushErrorMessage 向特定服务器中推送 MessageTypeError 消息 -func PushErrorMessage(srv *Server, err error, action MessageErrorAction) { +func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ...any) { msg := srv.messagePool.Get() msg.t = MessageTypeError - msg.attrs = []any{err, action, string(debug.Stack())} + msg.attrs = append([]any{err, action, string(debug.Stack())}, mark...) srv.pushMessage(msg) } // PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息 -func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []byte) { +func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []byte, mark ...any) { if serverId == srv.id { msg := srv.messagePool.Get() msg.t = MessageTypeCross - msg.attrs = []any{serverId, packet} + msg.attrs = append([]any{serverId, packet}, mark...) srv.pushMessage(msg) } else { if len(srv.cross) == 0 { @@ -96,17 +116,17 @@ func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []by } // PushTickerMessage 向特定服务器中推送 MessageTypeTicker 消息 -func PushTickerMessage(srv *Server, caller func()) { +func PushTickerMessage(srv *Server, caller func(), mark ...any) { msg := srv.messagePool.Get() msg.t = MessageTypeTicker - msg.attrs = []any{caller} + msg.attrs = append([]any{caller}, mark...) srv.pushMessage(msg) } // PushAsyncMessage 向特定服务器中推送 MessageTypeAsync 消息 -func PushAsyncMessage(srv *Server, caller func() error, callback ...func(err error)) { +func PushAsyncMessage(srv *Server, caller func() error, callback func(err error), mark ...any) { msg := srv.messagePool.Get() msg.t = MessageTypeAsync - msg.attrs = []any{caller, callback} + msg.attrs = append([]any{caller, callback, string(debug.Stack())}, mark...) srv.pushMessage(msg) } diff --git a/server/options.go b/server/options.go index 81cf54f..66344a3 100644 --- a/server/options.go +++ b/server/options.go @@ -79,7 +79,7 @@ func WithTicker(size int, autonomy bool) Option { srv.ticker = timer.GetTicker(size) } else { srv.ticker = timer.GetTicker(size, timer.WithCaller(func(name string, caller func()) { - PushTickerMessage(srv, caller) + PushTickerMessage(srv, caller, name) })) } }