gms_rpc_handlers.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package gm_services
  2. import (
  3. "encoding/json"
  4. "gadmin/internal/admin/consts"
  5. "gadmin/internal/admin/gm_rpc/rpc_share"
  6. "gadmin/internal/admin/ws"
  7. "gadmin/utility"
  8. "leafstalk/covenant/msg"
  9. "strings"
  10. "time"
  11. "github.com/sirupsen/logrus"
  12. )
  13. type CommonResp struct {
  14. MsgId string `json:"msgId"`
  15. ErrCode int `json:"errCode"`
  16. }
  17. func ListenRespMsg() {
  18. for {
  19. select {
  20. case logMsg, ok := <-rpc_share.LogChan:
  21. logrus.Infof("new ListenRespMsg MsgID:%v, Data:%+v", logMsg.MsgID, logMsg.Data)
  22. if ok {
  23. if isSingle, prefix, cId := isSinglemsg(logMsg.MsgID); isSingle { // 如果是查詢用戶的,直接發送給指定用戶
  24. switch prefix {
  25. case "qu":
  26. //infos := strings.Split(logMsg.MsgID, ":")
  27. //var ext map[string]interface{}
  28. //if user := data.GetUser(cast.ToInt64(infos[2])); user != nil {
  29. // ext = map[string]interface{}{"nickName": user.Nickname, "createAt": user.Createtime}
  30. //}
  31. resp := logMsg.Data.(*msg.ResponseGmPlayer)
  32. ws.BoardCast <- ws.Msg{
  33. Type: getMsgType(logMsg.MsgID),
  34. Id: time.Now().Unix(),
  35. Code: resp.ErrCode,
  36. Msg: string(utility.FormatToBytes(resp.Data)),
  37. CID: cId,
  38. //Extra: ext,
  39. }
  40. /*case "qs": // query switcher
  41. resp := logMsg.Data.(*msg.ResponseGmQueryModelStart)
  42. ws.BoardCast <- ws.Msg{
  43. Type: getMsgType(logMsg.MsgID),
  44. Id: time.Now().Unix(),
  45. Code: resp.ErrCode,
  46. Msg: fmt.Sprintf(`{"iosPay":%d,"openLevel":%d,"andrPay":%d,"andrOpenLevel":%d,"doubleAd":%d,"adOpenLevel":%d}`, resp.IosPay, resp.OpenLevel, resp.AndroidPay, resp.AndroidOpenLevel, resp.AdCount, resp.AdLevel),
  47. CID: cId,
  48. }
  49. case "qe": // query endlessRand
  50. resp := logMsg.Data.(*msg.ResponseGmQueryEndlessRank)
  51. //if len(resp.Data) == 0 {
  52. // getCurrentRankingListKey := func() string {
  53. // tm := time.Now()
  54. // y, w := tm.ISOWeek()
  55. // k := y*100 + w
  56. // return fmt.Sprintf("ranking_list:%d", k)
  57. // }
  58. //
  59. // key := getCurrentRankingListKey()
  60. // logrus.Warnf("无尽排行 getCurrentRankingListKey key:%+v", key)
  61. //
  62. // list, err := config.Redis.ZRevRangeWithScores(key, 0, 99).Result()
  63. // if err != nil {
  64. // ws.BoardCast <- ws.Msg{
  65. // Type: getMsgType(logMsg.MsgID),
  66. // Id: time.Now().Unix(),
  67. // Code: resp.ErrCode,
  68. // Msg: string(utility.FormatToBytes(resp.Data)),
  69. // CID: cId,
  70. // }
  71. // logrus.Warnf("无尽排行 ZRevRangeWithScores err:%+v", err)
  72. // return
  73. // }
  74. //
  75. // logrus.Warnf("list:%+v", list)
  76. //
  77. // var models []*msg.EndlessUserItem
  78. //
  79. // for k, v := range list {
  80. // score := v.Score / 1000000
  81. // models = append(models, &msg.EndlessUserItem{
  82. // PlayerId: cast.ToInt(v.Member),
  83. // Level: int(score),
  84. // Order: k + 1,
  85. // })
  86. // }
  87. //
  88. // resp.Data = append(resp.Data, models...)
  89. //}
  90. for _, v := range resp.Data {
  91. user := data.GetUser(cast.ToInt64(v.PlayerId))
  92. //logrus.Warnf("user:%+v", user)
  93. if user != nil {
  94. v.CreateAt = user.CreateTime.Format("2006-01-02 15:04:05")
  95. v.NickName = user.NickName
  96. }
  97. }
  98. ws.BoardCast <- ws.Msg{
  99. Type: getMsgType(logMsg.MsgID),
  100. Id: time.Now().Unix(),
  101. Code: resp.ErrCode,
  102. Msg: string(utility.FormatToBytes(resp.Data)),
  103. CID: cId,
  104. }
  105. case "qf": // query endlessRand
  106. resp := logMsg.Data.(*msg.ResponseGmGetGuide)
  107. ws.BoardCast <- ws.Msg{
  108. Type: getMsgType(logMsg.MsgID),
  109. Id: time.Now().Unix(),
  110. Code: resp.ErrCode,
  111. Msg: string(utility.FormatToBytes(resp.Data)),
  112. CID: cId,
  113. }*/
  114. }
  115. } else { // 其他消息全部客戶都通知
  116. //typ, ok := IsNoticeMsg(logMsg.MsgID)
  117. //if ok {
  118. // resp := logMsg.Data.(*msg.ResponseGmGetGuide)
  119. // ws.BoardCast <- ws.Msg{
  120. // Type: getMsgType(logMsg.MsgID),
  121. // Id: time.Now().Unix(),
  122. // Code: resp.ErrCode,
  123. // Msg: string(utility.FormatToBytes(resp.Data)),
  124. // CID: cId,
  125. // }
  126. // return
  127. //}
  128. var resp CommonResp
  129. if tip, ok := rpc_share.MsgMap[logMsg.MsgID]; ok {
  130. delete(rpc_share.MsgMap, logMsg.MsgID)
  131. if err := json.Unmarshal(utility.FormatToBytes(logMsg.Data), &resp); err != nil {
  132. logrus.Warnf("ListenRespMsg CommonResp json.Unmarshal err :%v", err)
  133. return
  134. }
  135. wsMsg := ws.Msg{
  136. Type: getMsgType(logMsg.MsgID),
  137. Id: time.Now().Unix(),
  138. Code: resp.ErrCode,
  139. Msg: tip,
  140. }
  141. ws.BoardCast <- wsMsg
  142. }
  143. }
  144. }
  145. default:
  146. time.Sleep(1 * time.Second)
  147. }
  148. }
  149. }
  150. func isSinglemsg(str string) (bool, string, string) {
  151. data := strings.Split(str, ":")
  152. if len(data) != 3 {
  153. return false, "", ""
  154. }
  155. return strings.HasPrefix(data[0], "q"), data[0], data[1]
  156. }
  157. func IsNoticeMsg(str string) (int64, bool) {
  158. data := strings.Split(str, ":")
  159. if len(data) != 2 {
  160. return 0, false
  161. }
  162. typ := getMsgType(str)
  163. if typ != consts.SocketBoardCastMsg {
  164. return typ, true
  165. }
  166. return 0, false
  167. }
  168. // getMsgType 获取消息类型
  169. func getMsgType(id string) int64 {
  170. if strings.HasPrefix(id, "qu") {
  171. return consts.SocketQueryUser
  172. } else if strings.HasPrefix(id, "qs") {
  173. return consts.SocketQuerySwitcher
  174. } else if strings.HasPrefix(id, "qe") {
  175. return consts.SocketQueryEndlessRank
  176. } else if strings.HasPrefix(id, "qf") {
  177. return consts.SocketQueryUserGuide
  178. //} else if strings.HasPrefix(id, "delRank") {
  179. // return consts.SocketDelRank
  180. } else {
  181. return consts.SocketBoardCastMsg
  182. }
  183. }