msg_send.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package model
  2. import (
  3. "rocommon/rpc"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. "roserver/serverproto"
  7. )
  8. /////////////////////////////////////////////发送数据
  9. func (this *WorldBossManager) SendMapRouter(msg interface{}, uid uint64) bool {
  10. data, meta, err := rpc.EncodeMessage(msg)
  11. if err != nil {
  12. util.InfoF("[SendMapRouter] EncodeMessage err:%v %v", err, msg)
  13. return false
  14. }
  15. if this.mapRouterNode == "" {
  16. this.mapRouterNode = model.SelectServiceNode(model.SERVICE_NODE_TYPE_MAP_ROUTER_STR, 0)
  17. }
  18. if this.mapRouterNode == "" {
  19. util.InfoF("[SendMapRouter] map router node not exist msg:%v", msg)
  20. return false
  21. }
  22. mapRouterSess := model.GetServiceNode(this.mapRouterNode)
  23. if mapRouterSess == nil {
  24. util.InfoF("[SendMapRouter] aoiRouter session not exist:%v", this.mapRouterNode)
  25. } else {
  26. //如果玩家信息存在,ClientId中存放的是玩家ID,否则存放的是玩家的gate sessionId
  27. mapRouterSess.Send(&serverproto.ServiceTransmitAck{
  28. MsgId: uint32(meta.ID),
  29. MsgData: data,
  30. //todo...
  31. // 对应的玩家 gate channelId channelRoleList[key]
  32. // 后续和gate直接通信时使用,如果断线重连需要重新绑定
  33. ClientId: uid, //对应的玩家 gate uuid uuidRoleList[key]
  34. })
  35. }
  36. return true
  37. }
  38. func (this *WorldBossManager) SendSocial(msg interface{}) bool {
  39. data, meta, err := rpc.EncodeMessage(msg)
  40. if err != nil {
  41. util.ErrorF("[SendSocial] EncodeMessage err:%v %v", err, msg)
  42. return false
  43. }
  44. if this.socialNode == "" {
  45. this.socialNode = model.SelectServiceNode(model.SERVICE_NODE_TYPE_SOCIAL_STR, 0)
  46. }
  47. if this.socialNode == "" {
  48. util.ErrorF("[SendSocial] social node not exist msg:%v", msg)
  49. return false
  50. }
  51. socialSess := model.GetServiceNode(this.socialNode)
  52. if socialSess == nil {
  53. util.ErrorF("[SendSocial] social session not exist:%v", this.mapRouterNode)
  54. } else {
  55. //如果玩家信息存在,ClientId中存放的是玩家ID,否则存放的是玩家的gate sessionId
  56. socialSess.Send(&serverproto.ServiceTransmitAck{
  57. MsgId: uint32(meta.ID),
  58. MsgData: data,
  59. })
  60. }
  61. return true
  62. }
  63. func SendDB(msg interface{}) bool {
  64. data, meta, err := rpc.EncodeMessage(msg)
  65. if err != nil {
  66. util.InfoF("[SendDB] EncodeMessage err:%v %v", err, msg)
  67. return false
  68. }
  69. dbNode := model.SelectServiceNode(model.SERVICE_NODE_TYPE_DB_STR, 0)
  70. if dbNode == "" {
  71. util.InfoF("[SendDB] db node not exist msg:%v", msg)
  72. return false
  73. }
  74. dbSess := model.GetServiceNode(dbNode)
  75. if dbSess == nil {
  76. util.ErrorF("[SendDB] db session not exist:%v", dbSess)
  77. return false
  78. } else {
  79. //如果玩家信息存在,ClientId中存放的是玩家ID,否则存放的是玩家的gate sessionId
  80. dbSess.Send(&serverproto.ServiceTransmitAck{
  81. MsgId: uint32(meta.ID),
  82. MsgData: data,
  83. })
  84. }
  85. return true
  86. }
  87. func (this *WorldBossManager) SendGame(msg interface{}, gameNode string, uid uint64) bool {
  88. return this.SendServiceByNode(msg, gameNode, uid)
  89. }
  90. func (this *WorldBossManager) SendServiceByNode(msg interface{}, serviceNode string, uid uint64) bool {
  91. data, meta, err := rpc.EncodeMessage(msg)
  92. if err != nil {
  93. util.InfoF("[SendServiceByNode] EncodeMessage err:%v %v", err, msg)
  94. return false
  95. }
  96. nodeSess := model.GetServiceNode(serviceNode)
  97. if nodeSess == nil {
  98. util.InfoF("[SendServiceByNode] service session not exist:%v", serviceNode)
  99. } else {
  100. //如果玩家信息存在,ClientId中存放的是玩家ID,否则存放的是玩家的gate sessionId
  101. ackMsg := &serverproto.ServiceTransmitAck{
  102. MsgId: uint32(meta.ID),
  103. MsgData: data,
  104. }
  105. if uid != 0 {
  106. ackMsg.ClientId = uid
  107. }
  108. nodeSess.Send(ackMsg)
  109. }
  110. return true
  111. }
  112. func SendToAllGame(msg interface{}) {
  113. data, info, err := rpc.EncodeMessage(msg)
  114. if err != nil {
  115. util.InfoF("[SendGame]EncodeMessage err:%v %v", err, msg)
  116. return
  117. }
  118. sendMsg := &serverproto.ServiceTransmitAck{
  119. MsgId: uint32(info.ID),
  120. MsgData: data,
  121. }
  122. serviceList := model.GetAllServiceNodeByName(model.SERVICE_NODE_TYPE_GAME_STR)
  123. if len(serviceList) > 0 {
  124. for _, node := range serviceList {
  125. gameSess := model.GetServiceNode(node)
  126. if gameSess != nil {
  127. gameSess.Send(sendMsg)
  128. }
  129. }
  130. }
  131. }