feat: 支持对消息增加 mark 标记,可在执行 Message.String() 函数时进行展现
This commit is contained in:
parent
7b8af0518e
commit
1e6974ae4b
|
@ -7,7 +7,7 @@ import (
|
||||||
type ConnReadonly interface {
|
type ConnReadonly interface {
|
||||||
RemoteAddr() net.Addr
|
RemoteAddr() net.Addr
|
||||||
GetID() string
|
GetID() string
|
||||||
GetIP() string // GetData 获取连接数据
|
GetIP() string
|
||||||
GetData(key any) any
|
GetData(key any) any
|
||||||
IsWebsocket() bool
|
IsWebsocket() bool
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package server
|
package server
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"github.com/kercylan98/minotaur/utils/str"
|
||||||
|
"reflect"
|
||||||
"runtime/debug"
|
"runtime/debug"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -56,32 +60,48 @@ type Message struct {
|
||||||
attrs []any
|
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 {
|
func (slf MessageType) String() string {
|
||||||
return messageNames[slf]
|
return messageNames[slf]
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushPacketMessage 向特定服务器中推送 MessageTypePacket 消息
|
// 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 := srv.messagePool.Get()
|
||||||
msg.t = MessageTypePacket
|
msg.t = MessageTypePacket
|
||||||
msg.attrs = []any{conn, packet}
|
msg.attrs = append([]any{conn, packet}, mark...)
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushErrorMessage 向特定服务器中推送 MessageTypeError 消息
|
// 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 := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeError
|
msg.t = MessageTypeError
|
||||||
msg.attrs = []any{err, action, string(debug.Stack())}
|
msg.attrs = append([]any{err, action, string(debug.Stack())}, mark...)
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息
|
// 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 {
|
if serverId == srv.id {
|
||||||
msg := srv.messagePool.Get()
|
msg := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeCross
|
msg.t = MessageTypeCross
|
||||||
msg.attrs = []any{serverId, packet}
|
msg.attrs = append([]any{serverId, packet}, mark...)
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
} else {
|
} else {
|
||||||
if len(srv.cross) == 0 {
|
if len(srv.cross) == 0 {
|
||||||
|
@ -96,17 +116,17 @@ func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []by
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushTickerMessage 向特定服务器中推送 MessageTypeTicker 消息
|
// PushTickerMessage 向特定服务器中推送 MessageTypeTicker 消息
|
||||||
func PushTickerMessage(srv *Server, caller func()) {
|
func PushTickerMessage(srv *Server, caller func(), mark ...any) {
|
||||||
msg := srv.messagePool.Get()
|
msg := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeTicker
|
msg.t = MessageTypeTicker
|
||||||
msg.attrs = []any{caller}
|
msg.attrs = append([]any{caller}, mark...)
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// PushAsyncMessage 向特定服务器中推送 MessageTypeAsync 消息
|
// 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 := srv.messagePool.Get()
|
||||||
msg.t = MessageTypeAsync
|
msg.t = MessageTypeAsync
|
||||||
msg.attrs = []any{caller, callback}
|
msg.attrs = append([]any{caller, callback, string(debug.Stack())}, mark...)
|
||||||
srv.pushMessage(msg)
|
srv.pushMessage(msg)
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,7 +79,7 @@ func WithTicker(size int, autonomy bool) Option {
|
||||||
srv.ticker = timer.GetTicker(size)
|
srv.ticker = timer.GetTicker(size)
|
||||||
} else {
|
} else {
|
||||||
srv.ticker = timer.GetTicker(size, timer.WithCaller(func(name string, caller func()) {
|
srv.ticker = timer.GetTicker(size, timer.WithCaller(func(name string, caller func()) {
|
||||||
PushTickerMessage(srv, caller)
|
PushTickerMessage(srv, caller, name)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue