default_msg.go 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/service"
  5. "rocommon/util"
  6. "roserver/baseserver/model"
  7. "roserver/serverproto"
  8. model2 "roserver/social/model"
  9. "strings"
  10. )
  11. func init() {
  12. //Default
  13. serverproto.Handle_SOCIAL_Default = func(ev rocommon.ProcEvent) {
  14. switch e := ev.Msg().(type) {
  15. case *serverproto.ServiceIdentifyACK: //服务器阶段断开连接
  16. if strings.Contains(e.ServiceId, model.SERVICE_NODE_TYPE_SOCIAL_STR) {
  17. //util.InfoF("serverproto.ServiceIdentifyACK msg=%v", e.ServiceId)
  18. //连接social后获取,后启动的social获取之前正常social的在线离线状态
  19. if !model2.InitSocialData && len(model2.SocialPlayerMag) <= 0 && len(model2.SocialOfflinePlayerMag) <= 0 {
  20. if service.GetServiceConfig().ServerStartTime < e.ServerStartTime {
  21. reqMsg := &serverproto.SSGetSocialInitDataReq{}
  22. model2.SendAllSocial(reqMsg)
  23. }
  24. }
  25. model2.InitSocialData = true
  26. }
  27. }
  28. //来自router跨服转发消息处理
  29. switch e := ev.(type) {
  30. case *model.RecvRouterServiceMsgEvent: //来自crossrouter消息
  31. //这边可以根据消息类型来处理不同消息的转发
  32. if e.ClientID > 0 {
  33. socialPlayer := model2.GetSocialPlayer(e.ClientID)
  34. if socialPlayer != nil {
  35. socialPlayer.SendGame(e.Message)
  36. }
  37. } else if len(e.ClientIDList) > 0 {
  38. model2.SendToAllGameWithUidList(e.Message, e.ClientIDList)
  39. }
  40. }
  41. }
  42. //收到其他social服务器获取状态数据请求
  43. serverproto.Handle_SOCIAL_SSGetSocialInitDataReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  44. msg := ev.Msg().(*serverproto.SSGetSocialInitDataReq)
  45. util.InfoF("receive SSGetSocialInitDataReq msg:%v", msg)
  46. ackMsg := &serverproto.SSGetSocialInitDataAck{}
  47. model2.GetInitSocialData(ackMsg)
  48. if len(ackMsg.OnlinePlayerList) > 0 || len(ackMsg.OfflinePlayerList) > 0 {
  49. model.ServiceReplay(ev, ackMsg)
  50. }
  51. })
  52. //social启动时从其他其他social获取的状态数据
  53. serverproto.Handle_SOCIAL_SSGetSocialInitDataAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  54. msg := ev.Msg().(*serverproto.SSGetSocialInitDataAck)
  55. util.InfoF("receive SSGetSocialInitDataAck msg:%v", msg)
  56. model2.InitSocialDataFromOtherSocialService(msg)
  57. })
  58. //玩家上线通知
  59. serverproto.Handle_SOCIAL_SSPlayerOnlineNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  60. msg := ev.Msg().(*serverproto.SSPlayerOnlineNtf)
  61. util.InfoF("receive SSPlayerOnlineNtf msg:%v", msg)
  62. model2.AddSocialPlayer(msg.ServiceNode, msg.BriefInfo)
  63. ssNtfMsg := &serverproto.SSPlayerOnlineNumNtf{
  64. OnlineNum: model2.GetSocialPlayerNum(),
  65. }
  66. //发送给其他game服务器节点
  67. model2.SendToAllGame(ssNtfMsg)
  68. })
  69. //玩家下线通知
  70. serverproto.Handle_SOCIAL_SSPlayerOfflineNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  71. msg := ev.Msg().(*serverproto.SSPlayerOfflineNtf)
  72. util.InfoF("receive SSPlayerOfflineNtf msg:%v", msg)
  73. model2.RemoveSocialPlayer(msg.Uid)
  74. ssNtfMsg := &serverproto.SSPlayerOnlineNumNtf{
  75. OnlineNum: model2.GetSocialPlayerNum(),
  76. }
  77. //发送给其他game服务器节点
  78. model2.SendToAllGame(ssNtfMsg)
  79. })
  80. }