map_msg.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. model2 "roserver/globalcross_map/model"
  7. "roserver/serverproto"
  8. )
  9. func init() {
  10. serverproto.Handle_GCROSSMAP_Default = func(ev rocommon.ProcEvent) {
  11. ////todo...
  12. //switch msg := ev.Msg().(type) {
  13. //case *serverproto.ClientClosedACK:
  14. // //处理客户端断开连接操作
  15. // uid, _ := model2.RoleMapMag.Leave(msg.Id, msg.ServiceId)
  16. // baseutil.InfoF("receive ClientClosedACK uid=%v cliId=%v leave map", uid, msg.Id)
  17. //
  18. // //直接回复可以使用ServiceReplay,后续通过其他服务器处理的话需要调用接口ReplayGate
  19. // //model.ServiceReplay(ev, ack)
  20. //}
  21. }
  22. //跨服聊天
  23. serverproto.Handle_GCROSSMAP_SSGCrossChatMessageReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  24. msg := ev.Msg().(*serverproto.SSGCrossChatMessageReq)
  25. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  26. if tmpEv == nil {
  27. return
  28. }
  29. util.InfoF("receive SSGCrossChatMessageReq msg=%v master=%v", msg, tmpEv.IsMaster)
  30. leaveSpace := model2.GetSpaceMag().FindEntitySpace(cliId.SessID)
  31. if leaveSpace == nil {
  32. return
  33. }
  34. leaveSpace.ChatMessageNtf(msg)
  35. })
  36. //角色进入地图(消息来自game)
  37. serverproto.Handle_GCROSSMAP_SSGCrossMapEnterReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  38. msg := ev.Msg().(*serverproto.SSGCrossMapEnterReq)
  39. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  40. if tmpEv == nil {
  41. return
  42. }
  43. util.InfoF("uid=%v receive SSGCrossMapEnterReq msg=%v master=%v", cliId.SessID, msg, tmpEv.IsMaster)
  44. space := model2.GetSpaceMag().GetSpaceByLineNum(msg.AoiLine)
  45. if space == nil || space.IsFull() {
  46. ssAckMsg := &serverproto.SSGCrossMapEnterAck{
  47. Error: int32(serverproto.ErrorCode_ERROR_CROSS_MAP_NOAOILINEFIND),
  48. LineNum: msg.AoiLine,
  49. }
  50. model.ServiceReplay(ev, ssAckMsg)
  51. return
  52. }
  53. space.CreateEntityFromMsg(cliId.SessID, tmpEv.IsMaster, tmpEv.FromZone, msg)
  54. })
  55. //角色离开地图
  56. serverproto.Handle_GCROSSMAP_SSGCrossMapLeaveReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  57. msg := ev.Msg().(*serverproto.SSGCrossMapLeaveReq)
  58. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  59. if tmpEv == nil {
  60. return
  61. }
  62. util.InfoF("uid=%v receive SSGCrossMapLeaveReq msg=%v master=%v", cliId.SessID, msg, tmpEv.IsMaster)
  63. leaveSpace := model2.GetSpaceMag().FindEntitySpace(cliId.SessID)
  64. if leaveSpace == nil {
  65. return
  66. }
  67. leaveSpace.RemoveEntity(cliId.SessID)
  68. })
  69. //移动(pos,dir)
  70. serverproto.Handle_GCROSSMAP_SSGCrossMapSyncPosReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  71. msg := ev.Msg().(*serverproto.SSGCrossMapSyncPosReq)
  72. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  73. if tmpEv == nil {
  74. return
  75. }
  76. //util.InfoF("uid=%v receive SSGCrossMapSyncPosReq msg=%v master=%v", cliId.SessID, msg, tmpEv.IsMaster)
  77. moveEntity := model2.GetSpaceMag().FindEntity(cliId.SessID, msg.CurSpaceId)
  78. if moveEntity == nil {
  79. return
  80. }
  81. moveEntity.OnUpdateDataFromClient(msg)
  82. })
  83. serverproto.Handle_GCROSSMAP_SSGCrossMapSyncParamReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  84. msg := ev.Msg().(*serverproto.SSGCrossMapSyncParamReq)
  85. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  86. if tmpEv == nil {
  87. return
  88. }
  89. //util.InfoF("uid=%v receive SSGCrossMapSyncParamReq msg=%v master=%v", cliId.SessID, msg, tmpEv.IsMaster)
  90. moveEntity := model2.GetSpaceMag().FindEntity(cliId.SessID, msg.CurSpaceId)
  91. if moveEntity == nil {
  92. return
  93. }
  94. moveEntity.UpdateEntityParamFromClient(msg)
  95. })
  96. //获取其他玩家角色信息
  97. serverproto.Handle_GCROSSMAP_SSGCrossMapOtherUnitShowInfoReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  98. msg := ev.Msg().(*serverproto.SSGCrossMapOtherUnitShowInfoReq)
  99. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  100. if tmpEv == nil {
  101. return
  102. }
  103. util.InfoF("uid=%v receive SSGCrossMapOtherUnitShowInfoReq msg=%v master=%v", cliId.SessID, msg, tmpEv.IsMaster)
  104. space := model2.GetSpaceMag().GetSpaceByLineNum(msg.CurSpaceId)
  105. if space == nil {
  106. ssAckMsg := &serverproto.SSGCrossMapOtherUnitShowInfoNtf{}
  107. model.ServiceReplay(ev, ssAckMsg)
  108. return
  109. }
  110. ssAckMsg := &serverproto.SSGCrossMapOtherUnitShowInfoNtf{}
  111. for _, data := range msg.ShowUidList {
  112. findEntity := space.GetEntity(data)
  113. if findEntity == nil {
  114. continue
  115. }
  116. info := &serverproto.PlayerShowInfo{Uid: data}
  117. findEntity.FillShowInfo(info)
  118. ssAckMsg.ShowInfoList = append(ssAckMsg.ShowInfoList, info)
  119. }
  120. model.ServiceReplay(ev, ssAckMsg)
  121. })
  122. //avatar信息同步等数据相关消息(//玩家显示变更通知) 定时更新
  123. serverproto.Handle_GCROSSMAP_SSGCrossMapUnitShowUpdateNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  124. msg := ev.Msg().(*serverproto.SSGCrossMapUnitShowUpdateNtf)
  125. tmpEv := ev.(*model.RecvRouterServiceMsgEvent)
  126. if tmpEv == nil {
  127. return
  128. }
  129. util.InfoF("receive SSGCrossMapUnitShowUpdateNtf msg=%v master=%v", msg, tmpEv.IsMaster)
  130. moveEntity := model2.GetSpaceMag().FindEntity(cliId.SessID, msg.CurSpaceId)
  131. if moveEntity == nil {
  132. return
  133. }
  134. moveEntity.ShowChange(msg.ShowInfoList[0])
  135. })
  136. }