map_send.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package model
  2. import (
  3. "log"
  4. "rocommon"
  5. "rocommon/rpc"
  6. "rocommon/util"
  7. "roserver/baseserver/model"
  8. "roserver/serverproto"
  9. "time"
  10. )
  11. //////////////////////////
  12. var testNowTime = util.GetCurrentTimeNow()
  13. var SCSyncPlayersNtfCount int32 = 0
  14. var SCPlayerLeaveNtfCount int32 = 0
  15. var SCPlayerEnterNtfCount int32 = 0
  16. func (this *MapRole) SendGate(msg interface{}, idList []uint64, transmit bool) {
  17. if this.unitType != int32(UnityType_Player) {
  18. return
  19. }
  20. info := rocommon.MessageInfoByMsg(msg)
  21. //todo...
  22. // for test
  23. if info.ID != 1047 {
  24. //return
  25. }
  26. gateSess := model.GetServiceNode(this.cliID.ServiceID)
  27. if gateSess == nil {
  28. util.InfoF("gate session not exist serviceId=%v", this.cliID.ServiceID)
  29. } else {
  30. data, info, err := rpc.EncodeMessage(msg)
  31. if err != nil {
  32. util.InfoF("ReplayGate gate EncodeMessage err=%v cliId=%v", err, this.cliID)
  33. return
  34. }
  35. if transmit {
  36. if idList != nil {
  37. //透传给gate服务器,然后再发送给客户端
  38. gateSess.Send(&serverproto.ServiceTransmitAck{
  39. MsgId: uint32(info.ID),
  40. MsgData: data,
  41. ClientIdList: idList,
  42. })
  43. } else {
  44. //透传给gate服务器,然后再发送给客户端
  45. gateSess.Send(&serverproto.ServiceTransmitAck{
  46. MsgId: uint32(info.ID),
  47. MsgData: data,
  48. ClientId: this.cliID.SessID,
  49. })
  50. }
  51. } else {
  52. gateSess.Send(msg)
  53. }
  54. switch msg.(type) {
  55. case *serverproto.SCSyncPlayersNtf:
  56. SCSyncPlayersNtfCount++
  57. case *serverproto.SCPlayerLeaveNtf:
  58. SCPlayerLeaveNtfCount++
  59. case *serverproto.SCPlayerEnterNtf:
  60. SCPlayerEnterNtfCount++
  61. }
  62. //log.Println("replay gate...", msg)
  63. if util.GetCurrentTimeNow().Sub(testNowTime) > time.Second {
  64. testNowTime = util.GetCurrentTimeNow()
  65. //log.Println("replay gate...[sync,leave,enter]",SCSyncPlayersNtfCount, SCPlayerLeaveNtfCount, SCPlayerEnterNtfCount)
  66. SCSyncPlayersNtfCount = 0
  67. SCPlayerLeaveNtfCount = 0
  68. SCPlayerEnterNtfCount = 0
  69. }
  70. }
  71. }
  72. //发送给后端服务器节点
  73. func (this *MapRole) SendBackend(msg interface{}) {
  74. //todo...
  75. // 可以用来定时同步aoi服务器状态
  76. }
  77. func SendGate(servicId string, msg interface{}, idList []uint64, transmit bool) {
  78. info := rocommon.MessageInfoByMsg(msg)
  79. //todo...
  80. // for test
  81. if info.ID != 1047 {
  82. //return
  83. }
  84. gateSess := model.GetServiceNode(servicId)
  85. if gateSess == nil {
  86. util.InfoF("gate session not exist serviceId=%v %v", servicId, info.ID)
  87. } else {
  88. data, info, err := rpc.EncodeMessage(msg)
  89. if err != nil {
  90. util.InfoF("ReplayGate gate EncodeMessage err=%v", err)
  91. return
  92. }
  93. if transmit {
  94. if idList != nil {
  95. //透传给gate服务器,然后再发送给客户端
  96. gateSess.Send(&serverproto.ServiceTransmitAck{
  97. MsgId: uint32(info.ID),
  98. MsgData: data,
  99. ClientIdList: idList,
  100. })
  101. } else {
  102. //透传给gate服务器,然后再发送给客户端
  103. gateSess.Send(&serverproto.ServiceTransmitAck{
  104. MsgId: uint32(info.ID),
  105. MsgData: data,
  106. })
  107. }
  108. } else {
  109. gateSess.Send(msg)
  110. }
  111. switch msg.(type) {
  112. case *serverproto.SCSyncPlayersNtf:
  113. SCSyncPlayersNtfCount++
  114. case *serverproto.SCPlayerLeaveNtf:
  115. SCPlayerLeaveNtfCount++
  116. case *serverproto.SCPlayerEnterNtf:
  117. SCPlayerEnterNtfCount++
  118. }
  119. //log.Println("replay gate...", msg)
  120. if util.GetCurrentTimeNow().Sub(testNowTime) > time.Second {
  121. testNowTime = util.GetCurrentTimeNow()
  122. log.Println("replay gate...[sync,leave,enter]", SCSyncPlayersNtfCount, SCPlayerLeaveNtfCount, SCPlayerEnterNtfCount)
  123. SCSyncPlayersNtfCount = 0
  124. SCPlayerLeaveNtfCount = 0
  125. SCPlayerEnterNtfCount = 0
  126. }
  127. }
  128. }