2025-12-05 20:15:55 +08:00

169 lines
4.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package model
import (
"rocommon/rpc"
"rocommon/util"
"roserver/baseserver/model"
"roserver/serverproto"
)
func (self *RoomManager) SendMapRouter(msg interface{}, uid uint64) bool {
data, meta, err := rpc.EncodeMessage(msg)
if err != nil {
util.InfoF("[SendMapRouter] EncodeMessage err:%v %v", err, msg)
return false
}
if self.mapRouterNode == "" {
RoomMgr.mapRouterNode = model.SelectServiceNode(model.SERVICE_NODE_TYPE_MAP_ROUTER_STR, 0)
}
if self.mapRouterNode == "" {
util.InfoF("[SendMapRouter] map router node not exist msg:%v", msg)
return false
}
mapRouterSess := model.GetServiceNode(self.mapRouterNode)
if mapRouterSess == nil {
util.InfoF("[SendMapRouter] aoiRouter session not exist:%v", self.mapRouterNode)
} 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
}
func (fruitManager *RoomManager) SendSocial(msg interface{}) bool {
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)
}
if fruitManager.socialNode == "" {
util.ErrorF("[SendSocial] social node not exist msg:%v", msg)
return false
}
socialSess := model.GetServiceNode(fruitManager.socialNode)
if socialSess == nil {
util.ErrorF("[SendSocial] social session not exist:%v", fruitManager.mapRouterNode)
} 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
}
func (fruitManager *RoomManager) SendGame(msg interface{}, gameNode string, uid uint64) bool {
return fruitManager.SendServiceByNode(msg, gameNode, uid)
}
func (fruitManager *RoomManager) SendServiceByNode(msg interface{}, serviceNode string, uid uint64) bool {
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)
}
}
}
}
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)
}
}
}
}