123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- package gm_services
- import (
- "encoding/json"
- "gadmin/internal/admin/consts"
- "gadmin/internal/admin/gm_rpc/rpc_share"
- "gadmin/internal/admin/ws"
- "gadmin/utility"
- "leafstalk/covenant/msg"
- "strings"
- "time"
- "github.com/sirupsen/logrus"
- )
- type CommonResp struct {
- MsgId string `json:"msgId"`
- ErrCode int `json:"errCode"`
- }
- func ListenRespMsg() {
- for {
- select {
- case logMsg, ok := <-rpc_share.LogChan:
- logrus.Infof("new ListenRespMsg MsgID:%v, Data:%+v", logMsg.MsgID, logMsg.Data)
- if ok {
- if isSingle, prefix, cId := isSinglemsg(logMsg.MsgID); isSingle { // 如果是查詢用戶的,直接發送給指定用戶
- switch prefix {
- case "qu":
- //infos := strings.Split(logMsg.MsgID, ":")
- //var ext map[string]interface{}
- //if user := data.GetUser(cast.ToInt64(infos[2])); user != nil {
- // ext = map[string]interface{}{"nickName": user.Nickname, "createAt": user.Createtime}
- //}
- resp := logMsg.Data.(*msg.ResponseGmPlayer)
- ws.BoardCast <- ws.Msg{
- Type: getMsgType(logMsg.MsgID),
- Id: time.Now().Unix(),
- Code: resp.ErrCode,
- Msg: string(utility.FormatToBytes(resp.Data)),
- CID: cId,
- //Extra: ext,
- }
- /*case "qs": // query switcher
- resp := logMsg.Data.(*msg.ResponseGmQueryModelStart)
- ws.BoardCast <- ws.Msg{
- Type: getMsgType(logMsg.MsgID),
- Id: time.Now().Unix(),
- Code: resp.ErrCode,
- 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),
- CID: cId,
- }
- case "qe": // query endlessRand
- resp := logMsg.Data.(*msg.ResponseGmQueryEndlessRank)
- //if len(resp.Data) == 0 {
- // getCurrentRankingListKey := func() string {
- // tm := time.Now()
- // y, w := tm.ISOWeek()
- // k := y*100 + w
- // return fmt.Sprintf("ranking_list:%d", k)
- // }
- //
- // key := getCurrentRankingListKey()
- // logrus.Warnf("无尽排行 getCurrentRankingListKey key:%+v", key)
- //
- // list, err := config.Redis.ZRevRangeWithScores(key, 0, 99).Result()
- // if err != nil {
- // ws.BoardCast <- ws.Msg{
- // Type: getMsgType(logMsg.MsgID),
- // Id: time.Now().Unix(),
- // Code: resp.ErrCode,
- // Msg: string(utility.FormatToBytes(resp.Data)),
- // CID: cId,
- // }
- // logrus.Warnf("无尽排行 ZRevRangeWithScores err:%+v", err)
- // return
- // }
- //
- // logrus.Warnf("list:%+v", list)
- //
- // var models []*msg.EndlessUserItem
- //
- // for k, v := range list {
- // score := v.Score / 1000000
- // models = append(models, &msg.EndlessUserItem{
- // PlayerId: cast.ToInt(v.Member),
- // Level: int(score),
- // Order: k + 1,
- // })
- // }
- //
- // resp.Data = append(resp.Data, models...)
- //}
- for _, v := range resp.Data {
- user := data.GetUser(cast.ToInt64(v.PlayerId))
- //logrus.Warnf("user:%+v", user)
- if user != nil {
- v.CreateAt = user.CreateTime.Format("2006-01-02 15:04:05")
- v.NickName = user.NickName
- }
- }
- ws.BoardCast <- ws.Msg{
- Type: getMsgType(logMsg.MsgID),
- Id: time.Now().Unix(),
- Code: resp.ErrCode,
- Msg: string(utility.FormatToBytes(resp.Data)),
- CID: cId,
- }
- case "qf": // query endlessRand
- resp := logMsg.Data.(*msg.ResponseGmGetGuide)
- ws.BoardCast <- ws.Msg{
- Type: getMsgType(logMsg.MsgID),
- Id: time.Now().Unix(),
- Code: resp.ErrCode,
- Msg: string(utility.FormatToBytes(resp.Data)),
- CID: cId,
- }*/
- }
- } else { // 其他消息全部客戶都通知
- //typ, ok := IsNoticeMsg(logMsg.MsgID)
- //if ok {
- // resp := logMsg.Data.(*msg.ResponseGmGetGuide)
- // ws.BoardCast <- ws.Msg{
- // Type: getMsgType(logMsg.MsgID),
- // Id: time.Now().Unix(),
- // Code: resp.ErrCode,
- // Msg: string(utility.FormatToBytes(resp.Data)),
- // CID: cId,
- // }
- // return
- //}
- var resp CommonResp
- if tip, ok := rpc_share.MsgMap[logMsg.MsgID]; ok {
- delete(rpc_share.MsgMap, logMsg.MsgID)
- if err := json.Unmarshal(utility.FormatToBytes(logMsg.Data), &resp); err != nil {
- logrus.Warnf("ListenRespMsg CommonResp json.Unmarshal err :%v", err)
- return
- }
- wsMsg := ws.Msg{
- Type: getMsgType(logMsg.MsgID),
- Id: time.Now().Unix(),
- Code: resp.ErrCode,
- Msg: tip,
- }
- ws.BoardCast <- wsMsg
- }
- }
- }
- default:
- time.Sleep(1 * time.Second)
- }
- }
- }
- func isSinglemsg(str string) (bool, string, string) {
- data := strings.Split(str, ":")
- if len(data) != 3 {
- return false, "", ""
- }
- return strings.HasPrefix(data[0], "q"), data[0], data[1]
- }
- func IsNoticeMsg(str string) (int64, bool) {
- data := strings.Split(str, ":")
- if len(data) != 2 {
- return 0, false
- }
- typ := getMsgType(str)
- if typ != consts.SocketBoardCastMsg {
- return typ, true
- }
- return 0, false
- }
- // getMsgType 获取消息类型
- func getMsgType(id string) int64 {
- if strings.HasPrefix(id, "qu") {
- return consts.SocketQueryUser
- } else if strings.HasPrefix(id, "qs") {
- return consts.SocketQuerySwitcher
- } else if strings.HasPrefix(id, "qe") {
- return consts.SocketQueryEndlessRank
- } else if strings.HasPrefix(id, "qf") {
- return consts.SocketQueryUserGuide
- //} else if strings.HasPrefix(id, "delRank") {
- // return consts.SocketDelRank
- } else {
- return consts.SocketBoardCastMsg
- }
- }
|