refactor: cross 包服务器 id 更改为 string 类型

This commit is contained in:
kercylan98 2023-10-21 11:14:10 +08:00
parent ba2f3af398
commit 9e339065d4
7 changed files with 17 additions and 17 deletions

View File

@ -6,10 +6,10 @@ type Cross interface {
// - serverId: 本服id // - serverId: 本服id
// - packetHandle.serverId: 发送跨服消息的服务器id // - packetHandle.serverId: 发送跨服消息的服务器id
// - packetHandle.packet: 数据包 // - packetHandle.packet: 数据包
Init(server *Server, packetHandle func(serverId int64, packet []byte)) error Init(server *Server, packetHandle func(serverId string, packet []byte)) error
// PushMessage 推送跨服消息 // PushMessage 推送跨服消息
// - serverId: 目标服务器id // - serverId: 目标服务器id
PushMessage(serverId int64, packet []byte) error PushMessage(serverId string, packet []byte) error
// Release 释放资源 // Release 释放资源
Release() Release()
} }

View File

@ -2,6 +2,6 @@ package cross
// Message 跨服消息数据结构 // Message 跨服消息数据结构
type Message struct { type Message struct {
ServerId int64 `json:"server_id"` ServerId string `json:"server_id"`
Packet []byte `json:"packet"` Packet []byte `json:"packet"`
} }

View File

@ -22,7 +22,7 @@ func NewNats(url string, options ...NatsOption) *Nats {
messagePool: concurrent.NewPool[*Message](1024*100, func() *Message { messagePool: concurrent.NewPool[*Message](1024*100, func() *Message {
return new(Message) return new(Message)
}, func(data *Message) { }, func(data *Message) {
data.ServerId = 0 data.ServerId = ""
data.Packet = nil data.Packet = nil
}), }),
} }
@ -41,7 +41,7 @@ type Nats struct {
messagePool *concurrent.Pool[*Message] messagePool *concurrent.Pool[*Message]
} }
func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, packet []byte)) (err error) { func (slf *Nats) Init(server *server.Server, packetHandle func(serverId string, packet []byte)) (err error) {
if slf.conn == nil { if slf.conn == nil {
if len(slf.options) == 0 { if len(slf.options) == 0 {
slf.options = append(slf.options, slf.options = append(slf.options,
@ -72,7 +72,7 @@ func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, p
return err return err
} }
func (slf *Nats) PushMessage(serverId int64, packet []byte) error { func (slf *Nats) PushMessage(serverId string, packet []byte) error {
message := slf.messagePool.Get() message := slf.messagePool.Get()
defer slf.messagePool.Release(message) defer slf.messagePool.Release(message)
message.ServerId = serverId message.ServerId = serverId

View File

@ -19,7 +19,7 @@ type StopEventHandle func(srv *Server)
type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte) type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)
type ConnectionOpenedEventHandle func(srv *Server, conn *Conn) type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any) type ConnectionClosedEventHandle func(srv *Server, conn *Conn, err any)
type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId int64, packet []byte) type ReceiveCrossPacketEventHandle func(srv *Server, senderServerId string, packet []byte)
type MessageErrorEventHandle func(srv *Server, message *Message, err error) type MessageErrorEventHandle func(srv *Server, message *Message, err error)
type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration) type MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
type ConsoleCommandEventHandle func(srv *Server) type ConsoleCommandEventHandle func(srv *Server)
@ -239,7 +239,7 @@ func (slf *event) RegReceiveCrossPacketEvent(handle ReceiveCrossPacketEventHandl
log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String())) log.Info("Server", log.String("RegEvent", runtimes.CurrentRunningFuncName()), log.String("handle", reflect.TypeOf(handle).String()))
} }
func (slf *event) OnReceiveCrossPacketEvent(serverId int64, packet []byte) { func (slf *event) OnReceiveCrossPacketEvent(serverId string, packet []byte) {
slf.receiveCrossPacketEventHandles.RangeValue(func(index int, value ReceiveCrossPacketEventHandle) bool { slf.receiveCrossPacketEventHandles.RangeValue(func(index int, value ReceiveCrossPacketEventHandle) bool {
value(slf.Server, serverId, packet) value(slf.Server, serverId, packet)
return true return true

View File

@ -154,14 +154,14 @@ func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ..
} }
// GetCrossMessageAttrs 获取消息中的跨服属性 // GetCrossMessageAttrs 获取消息中的跨服属性
func (slf *Message) GetCrossMessageAttrs() (serverId int64, packet []byte) { func (slf *Message) GetCrossMessageAttrs() (serverId string, packet []byte) {
serverId = slf.attrs[0].(int64) serverId = slf.attrs[0].(string)
packet = slf.attrs[1].([]byte) packet = slf.attrs[1].([]byte)
return return
} }
// PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息 // PushCrossMessage 向特定服务器中推送 MessageTypeCross 消息
func PushCrossMessage(srv *Server, crossName string, serverId int64, packet []byte, mark ...any) { func PushCrossMessage(srv *Server, crossName string, serverId string, 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

View File

@ -31,7 +31,7 @@ type option struct {
} }
type runtime struct { type runtime struct {
id int64 // 服务器id id string // 服务器id
cross map[string]Cross // 跨服 cross map[string]Cross // 跨服
deadlockDetect time.Duration // 是否开启死锁检测 deadlockDetect time.Duration // 是否开启死锁检测
supportMessageTypes map[int]bool // websocket模式下支持的消息类型 supportMessageTypes map[int]bool // websocket模式下支持的消息类型
@ -134,7 +134,7 @@ func WithTicker(size int, autonomy bool) Option {
// WithCross 通过跨服的方式创建服务器 // WithCross 通过跨服的方式创建服务器
// - 推送跨服消息时,将推送到对应 crossName 的跨服中间件中crossName 可以满足不同功能采用不同的跨服/消息中间件 // - 推送跨服消息时,将推送到对应 crossName 的跨服中间件中crossName 可以满足不同功能采用不同的跨服/消息中间件
// - 通常情况下 crossName 仅需一个即可 // - 通常情况下 crossName 仅需一个即可
func WithCross(crossName string, serverId int64, cross Cross) Option { func WithCross(crossName string, serverId string, cross Cross) Option {
return func(srv *Server) { return func(srv *Server) {
start: start:
{ {
@ -143,18 +143,18 @@ func WithCross(crossName string, serverId int64, cross Cross) Option {
srv.cross = map[string]Cross{} srv.cross = map[string]Cross{}
} }
srv.cross[crossName] = cross srv.cross[crossName] = cross
err := cross.Init(srv, func(serverId int64, packet []byte) { err := cross.Init(srv, func(serverId string, packet []byte) {
msg := srv.messagePool.Get() msg := srv.messagePool.Get()
msg.t = MessageTypeCross msg.t = MessageTypeCross
msg.attrs = []any{serverId, packet} msg.attrs = []any{serverId, packet}
srv.pushMessage(msg) srv.pushMessage(msg)
}) })
if err != nil { if err != nil {
log.Info("Cross", log.Int64("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()), log.String("State", "WaitNatsRun")) log.Info("Cross", log.String("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()), log.String("State", "WaitNatsRun"))
time.Sleep(1 * time.Second) time.Sleep(1 * time.Second)
goto start goto start
} }
log.Info("Cross", log.Int64("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String())) log.Info("Cross", log.String("ServerID", serverId), log.String("Cross", reflect.TypeOf(cross).String()))
} }
} }
} }

View File

@ -440,7 +440,7 @@ func (slf *Server) CloseConn(id string) {
} }
// GetID 获取服务器id // GetID 获取服务器id
func (slf *Server) GetID() int64 { func (slf *Server) GetID() string {
if slf.cross == nil { if slf.cross == nil {
panic(ErrNoSupportCross) panic(ErrNoSupportCross)
} }