chat_msg.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. "roserver/serverproto"
  7. model2 "roserver/social/model"
  8. )
  9. func init() {
  10. //聊天消息
  11. serverproto.Handle_SOCIAL_CSChatMessageReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  12. msg := ev.Msg().(*serverproto.CSChatMessageReq)
  13. util.InfoF("receive CSChatMessageReq msg:%v", msg)
  14. switch (serverproto.ChatMessageType)(msg.Type) {
  15. case serverproto.ChatMessageType_CMT_PERSONAL:
  16. ackMsg := &serverproto.SSChatMessageAck{
  17. Error: int32(serverproto.ErrorCode_ERROR_OK),
  18. TargetId: msg.TargetId,
  19. Message: msg.Message,
  20. Type: msg.Type,
  21. }
  22. targetPlayer := model2.GetSocialPlayer(msg.TargetId)
  23. if targetPlayer != nil {
  24. //在线玩家处理
  25. ntfMsg := &serverproto.SSChatMessageNtf{
  26. TargetId: msg.TargetId,
  27. Type: msg.Type,
  28. Message: msg.Message,
  29. FromId: msg.FromId,
  30. }
  31. targetPlayer.SendGame(ntfMsg)
  32. } else {
  33. util.InfoF("target player not found:", msg.TargetId)
  34. //ackMsg.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
  35. ackMsg.Error = int32(serverproto.ErrorCode_ERROR_CHAT_WORLD_TARGET_OFFLINE)
  36. }
  37. model.ServiceReplay(ev, ackMsg)
  38. case serverproto.ChatMessageType_CMT_WORLD:
  39. //发送给其他game服务器节点
  40. ntfMsg := &serverproto.SSChatMessageNtf{
  41. Type: msg.Type,
  42. Message: msg.Message,
  43. FromId: msg.FromId,
  44. }
  45. model2.SendToAllGameExcept(ntfMsg, msg.FromId.Uid)
  46. }
  47. })
  48. //公会聊天
  49. serverproto.Handle_SOCIAL_SSGuildChatMessageNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  50. msg := ev.Msg().(*serverproto.SSGuildChatMessageNtf)
  51. util.InfoF("receive SSGuildChatMessageNtf msg:%v", msg)
  52. ackMsg := &serverproto.SSChatMessageNtf{
  53. Message: msg.Message,
  54. Type: msg.Type,
  55. FromId: msg.FromId,
  56. }
  57. for _, data := range msg.UidList {
  58. targetPlayer := model2.GetSocialPlayer(data)
  59. if targetPlayer != nil {
  60. ackMsg.TargetId = data
  61. targetPlayer.SendGame(ackMsg)
  62. }
  63. }
  64. })
  65. //公会聊天
  66. serverproto.Handle_SOCIAL_SSGuildNoticeMessageNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  67. msg := ev.Msg().(*serverproto.SSGuildNoticeMessageNtf)
  68. util.InfoF("receive SSGuildNoticeMessageNtf msg:%v", msg)
  69. ntfMsg := &serverproto.SSGuildNoticeToRoleNtf{}
  70. for _, data := range msg.UidList {
  71. targetPlayer := model2.GetSocialPlayer(data)
  72. if targetPlayer != nil {
  73. ntfMsg.SysMsg = msg.SysMsg
  74. ntfMsg.Uid = data
  75. targetPlayer.SendGame(ntfMsg)
  76. }
  77. }
  78. })
  79. //获取私聊玩家在线状态
  80. serverproto.Handle_SOCIAL_CSChatPlayerStateReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  81. msg := ev.Msg().(*serverproto.CSChatPlayerStateReq)
  82. util.InfoF("receive CSChatPlayerStateReq msg:%v", msg)
  83. ackMsg := &serverproto.SCChatPlayerStateAck{}
  84. for _, data := range msg.TargetIdList {
  85. targetPlayer := model2.GetSocialPlayer(data)
  86. if targetPlayer != nil {
  87. ackMsg.StateList = append(ackMsg.StateList, &serverproto.PlayerStateInfo{
  88. Uid: data,
  89. Online: true,
  90. })
  91. } else {
  92. ackMsg.StateList = append(ackMsg.StateList, &serverproto.PlayerStateInfo{
  93. Uid: data,
  94. Online: false,
  95. })
  96. }
  97. }
  98. model.ServiceReplay(ev, ackMsg)
  99. })
  100. //通过social->gmweb 发送给gm后台做聊天消息监控
  101. serverproto.Handle_SOCIAL_SSWebGMChatMsgNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  102. msg := ev.Msg().(*serverproto.SSWebGMChatMsgNtf)
  103. util.InfoF("receive SSWebGMChatMsgNtf msg:%v", msg)
  104. model2.SendGmweb(msg)
  105. })
  106. }