gms_rpc_handlers.go 5.5 KB

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