169 lines
4.6 KiB
Go
169 lines
4.6 KiB
Go
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)
|
||
}
|
||
}
|
||
}
|
||
}
|