handler.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package ws
  2. import (
  3. "encoding/json"
  4. "errors"
  5. "fmt"
  6. "gadmin/config"
  7. "gadmin/internal/admin/consts"
  8. "gadmin/internal/admin/gm_rpc/rpc_share"
  9. "gadmin/utility/player"
  10. "leafstalk/covenant/msg"
  11. "strconv"
  12. "time"
  13. "github.com/gorilla/websocket"
  14. "github.com/sirupsen/logrus"
  15. )
  16. var (
  17. errUserNotFound = Msg{
  18. Type: consts.SocketQueryUser,
  19. Code: consts.CodePanicErr,
  20. Msg: "用户查询失败..",
  21. }
  22. )
  23. func (client *Client) HandlerReqMsg(reqMsg ReqMsg) {
  24. if reqMsg.Type != consts.SocketHeartBeat {
  25. logrus.WithField("from", "HandlerReqMsg").Infof("ws收到消息 sid:%d, admin_id:%v, 请求数据: %+v", client.Id, client.claims.ID, reqMsg)
  26. }
  27. switch reqMsg.Type {
  28. // 心跳
  29. case consts.SocketHeartBeat:
  30. client.lastHeart = time.Now().Unix()
  31. client.WriteResp([]byte(`{"type":1, "pong":1}`))
  32. // 查询用户
  33. case consts.SocketQueryUser:
  34. playerId, _ := strconv.ParseInt(reqMsg.Data, 10, 64)
  35. if playerId == 0 {
  36. client.msgChan <- errUserNotFound
  37. }
  38. //err := gate.SendToWorld(0, &msg.GmPlayer{
  39. // MsgId: fmt.Sprintf("qu:%d:%d", client.Id, playerId),
  40. // PlayerID: playerId,
  41. // OperatorId: client.claims.ID,
  42. //})
  43. //
  44. //if err != nil {
  45. // logrus.WithField("from", "gate.SendToWorld").Errorln(err)
  46. // client.msgChan <- Msg{
  47. // Type: consts.SocketQueryUser,
  48. // Code: consts.CodePanicErr,
  49. // Msg: "用户查询失败:" + err.Error(),
  50. // }
  51. //}
  52. DB, err := player.GetDBByUserId(playerId)
  53. if err != nil {
  54. client.msgChan <- Msg{
  55. Type: consts.SocketQueryUser,
  56. Code: consts.CodePanicErr,
  57. Msg: "用户查询失败 GetDBByUserId:" + err.Error(),
  58. }
  59. return
  60. }
  61. if DB <= 0 {
  62. client.msgChan <- Msg{
  63. Type: consts.SocketQueryUser,
  64. Code: consts.CodePanicErr,
  65. Msg: "玩家服务器信息获取失败",
  66. }
  67. return
  68. }
  69. data := &msg.GmPlayer{
  70. MsgId: fmt.Sprintf("qu:%d:%d", client.Id, playerId),
  71. PlayerID: playerId,
  72. OperatorId: client.claims.ID,
  73. }
  74. var resp *msg.ResponseGmPlayer
  75. res, err := config.GmNats.GmRequest(DB, "GmPlayer", data)
  76. if err != nil {
  77. client.msgChan <- Msg{
  78. Type: consts.SocketQueryUser,
  79. Code: consts.CodePanicErr,
  80. Msg: "用户查询失败 nats查询出错:" + err.Error(),
  81. }
  82. return
  83. }
  84. if err = json.Unmarshal(res, &resp); err != nil {
  85. client.msgChan <- Msg{
  86. Type: consts.SocketQueryUser,
  87. Code: consts.CodePanicErr,
  88. Msg: "用户查询失败 nats Unmarshal出错:" + err.Error(),
  89. }
  90. return
  91. }
  92. rpc_share.LogChan <- rpc_share.LogMsg{
  93. MsgID: data.MsgId,
  94. Data: resp,
  95. }
  96. }
  97. }
  98. func (client *Client) WriteResp(data []byte) (err error) {
  99. client.Lock.Lock()
  100. defer client.Lock.Unlock()
  101. if client.lastHeart < time.Now().Unix()-300 {
  102. client.c.Close()
  103. return errors.New("timeout")
  104. }
  105. err = client.c.WriteMessage(websocket.TextMessage, data)
  106. return
  107. }