169 lines
4.6 KiB
Go
Raw Normal View History

2025-06-06 14:36:05 +08:00
package model
import (
"rocommon/rpc"
"rocommon/util"
"roserver/baseserver/model"
"roserver/serverproto"
)
2025-12-05 20:15:55 +08:00
func (self *RoomManager) SendMapRouter(msg interface{}, uid uint64) bool {
2025-06-06 14:36:05 +08:00
data, meta, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendMapRouter] EncodeMessage err:%v %v", err, msg)
return false
}
if self.mapRouterNode == "" {
2025-12-05 20:15:55 +08:00
RoomMgr.mapRouterNode = model.SelectServiceNode(model.SERVICE_NODE_TYPE_MAP_ROUTER_STR, 0)
2025-06-06 14:36:05 +08:00
}
if self.mapRouterNode == "" {
2025-06-06 14:36:05 +08:00
util.InfoF("[SendMapRouter] map router node not exist msg:%v", msg)
return false
}
mapRouterSess := model.GetServiceNode(self.mapRouterNode)
2025-06-06 14:36:05 +08:00
if mapRouterSess == nil {
util.InfoF("[SendMapRouter] aoiRouter session not exist:%v", self.mapRouterNode)
2025-06-06 14:36:05 +08:00
} else {
//如果玩家信息存在ClientId中存放的是玩家ID否则存放的是玩家的gate sessionId
mapRouterSess.Send(&serverproto.ServiceTransmitAck{
MsgId: uint32(meta.ID),
MsgData: data,
//todo...
// 对应的玩家 gate channelId channelRoleList[key]
// 后续和gate直接通信时使用如果断线重连需要重新绑定
ClientId: uid, //对应的玩家 gate uuid uuidRoleList[key]
})
}
return true
}
2025-12-05 20:15:55 +08:00
func (fruitManager *RoomManager) SendSocial(msg interface{}) bool {
2025-06-06 14:36:05 +08:00
data, meta, err := rpc.EncodeMessage(msg)
if err != nil {
util.ErrorF("[SendSocial] EncodeMessage err:%v %v", err, msg)
return false
}
if fruitManager.socialNode == "" {
fruitManager.socialNode = model.SelectServiceNode(model.SERVICE_NODE_TYPE_SOCIAL_STR, 0)
2025-06-06 14:36:05 +08:00
}
if fruitManager.socialNode == "" {
2025-06-06 14:36:05 +08:00
util.ErrorF("[SendSocial] social node not exist msg:%v", msg)
return false
}
socialSess := model.GetServiceNode(fruitManager.socialNode)
2025-06-06 14:36:05 +08:00
if socialSess == nil {
util.ErrorF("[SendSocial] social session not exist:%v", fruitManager.mapRouterNode)
2025-06-06 14:36:05 +08:00
} else {
//如果玩家信息存在ClientId中存放的是玩家ID否则存放的是玩家的gate sessionId
socialSess.Send(&serverproto.ServiceTransmitAck{
MsgId: uint32(meta.ID),
MsgData: data,
})
}
return true
}
func SendDB(msg interface{}) bool {
data, meta, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendDB] EncodeMessage err:%v %v", err, msg)
return false
}
dbNode := model.SelectServiceNode(model.SERVICE_NODE_TYPE_DB_STR, 0)
if dbNode == "" {
util.InfoF("[SendDB] db node not exist msg:%v", msg)
return false
}
dbSess := model.GetServiceNode(dbNode)
if dbSess == nil {
util.ErrorF("[SendDB] db session not exist:%v", dbSess)
return false
} else {
//如果玩家信息存在ClientId中存放的是玩家ID否则存放的是玩家的gate sessionId
dbSess.Send(&serverproto.ServiceTransmitAck{
MsgId: uint32(meta.ID),
MsgData: data,
})
}
return true
}
2025-12-05 20:15:55 +08:00
func (fruitManager *RoomManager) SendGame(msg interface{}, gameNode string, uid uint64) bool {
return fruitManager.SendServiceByNode(msg, gameNode, uid)
2025-06-06 14:36:05 +08:00
}
2025-12-05 20:15:55 +08:00
func (fruitManager *RoomManager) SendServiceByNode(msg interface{}, serviceNode string, uid uint64) bool {
2025-06-06 14:36:05 +08:00
data, meta, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendServiceByNode] EncodeMessage err:%v %v", err, msg)
return false
}
nodeSess := model.GetServiceNode(serviceNode)
if nodeSess == nil {
util.InfoF("[SendServiceByNode] service session not exist:%v", serviceNode)
} else {
//如果玩家信息存在ClientId中存放的是玩家ID否则存放的是玩家的gate sessionId
ackMsg := &serverproto.ServiceTransmitAck{
MsgId: uint32(meta.ID),
MsgData: data,
}
if uid != 0 {
ackMsg.ClientId = uid
}
nodeSess.Send(ackMsg)
}
return true
}
func SendToAllGame(msg interface{}) {
data, info, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendGame]EncodeMessage err:%v %v", err, msg)
return
}
sendMsg := &serverproto.ServiceTransmitAck{
MsgId: uint32(info.ID),
MsgData: data,
}
serviceList := model.GetAllServiceNodeByName(model.SERVICE_NODE_TYPE_GAME_STR)
if len(serviceList) > 0 {
for _, node := range serviceList {
gameSess := model.GetServiceNode(node)
if gameSess != nil {
gameSess.Send(sendMsg)
}
}
}
}
2025-06-10 21:56:29 +08:00
func SendToAllGameWithUidList(msg interface{}, uidList []uint64) {
data, info, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendGame]EncodeMessage err:%v %v", err, msg)
return
}
sendMsg := &serverproto.ServiceTransmitAck{
MsgId: uint32(info.ID),
MsgData: data,
ClientIdList: uidList,
}
serviceList := model.GetAllServiceNodeByName(model.SERVICE_NODE_TYPE_GAME_STR)
if len(serviceList) > 0 {
for _, node := range serviceList {
gameSess := model.GetServiceNode(node)
if gameSess != nil {
gameSess.Send(sendMsg)
}
}
}
}