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
// - packetHandle.serverId: 发送跨服消息的服务器id
// - packetHandle.packet: 数据包
Init(server *Server, packetHandle func(serverId int64, packet []byte)) error
Init(server *Server, packetHandle func(serverId string, packet []byte)) error
// PushMessage 推送跨服消息
// - serverId: 目标服务器id
PushMessage(serverId int64, packet []byte) error
PushMessage(serverId string, packet []byte) error
// Release 释放资源
Release()
}

View File

@ -2,6 +2,6 @@ package cross
// Message 跨服消息数据结构
type Message struct {
ServerId int64 `json:"server_id"`
ServerId string `json:"server_id"`
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 {
return new(Message)
}, func(data *Message) {
data.ServerId = 0
data.ServerId = ""
data.Packet = nil
}),
}
@ -41,7 +41,7 @@ type Nats struct {
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 len(slf.options) == 0 {
slf.options = append(slf.options,
@ -72,7 +72,7 @@ func (slf *Nats) Init(server *server.Server, packetHandle func(serverId int64, p
return err
}
func (slf *Nats) PushMessage(serverId int64, packet []byte) error {
func (slf *Nats) PushMessage(serverId string, packet []byte) error {
message := slf.messagePool.Get()
defer slf.messagePool.Release(message)
message.ServerId = serverId

View File

@ -19,7 +19,7 @@ type StopEventHandle func(srv *Server)
type ConnectionReceivePacketEventHandle func(srv *Server, conn *Conn, packet []byte)
type ConnectionOpenedEventHandle func(srv *Server, conn *Conn)
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 MessageLowExecEventHandle func(srv *Server, message *Message, cost time.Duration)
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()))
}
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 {
value(slf.Server, serverId, packet)
return true

View File

@ -154,14 +154,14 @@ func PushErrorMessage(srv *Server, err error, action MessageErrorAction, mark ..
}
// GetCrossMessageAttrs 获取消息中的跨服属性
func (slf *Message) GetCrossMessageAttrs() (serverId int64, packet []byte) {
serverId = slf.attrs[0].(int64)
func (slf *Message) GetCrossMessageAttrs() (serverId string, packet []byte) {
serverId = slf.attrs[0].(string)
packet = slf.attrs[1].([]byte)
return
}
// 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 {
msg := srv.messagePool.Get()
msg.t = MessageTypeCross

View File

@ -31,7 +31,7 @@ type option struct {
}
type runtime struct {
id int64 // 服务器id
id string // 服务器id
cross map[string]Cross // 跨服
deadlockDetect time.Duration // 是否开启死锁检测
supportMessageTypes map[int]bool // websocket模式下支持的消息类型
@ -134,7 +134,7 @@ func WithTicker(size int, autonomy bool) Option {
// WithCross 通过跨服的方式创建服务器
// - 推送跨服消息时,将推送到对应 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) {
start:
{
@ -143,18 +143,18 @@ func WithCross(crossName string, serverId int64, cross Cross) Option {
srv.cross = map[string]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.t = MessageTypeCross
msg.attrs = []any{serverId, packet}
srv.pushMessage(msg)
})
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)
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
func (slf *Server) GetID() int64 {
func (slf *Server) GetID() string {
if slf.cross == nil {
panic(ErrNoSupportCross)
}