handler.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. DB, err := player.GetDBByUserId(playerId)
  39. if err != nil {
  40. client.msgChan <- Msg{
  41. Type: consts.SocketQueryUser,
  42. Code: consts.CodePanicErr,
  43. Msg: "用户查询失败 GetDBByUserId:" + err.Error(),
  44. }
  45. return
  46. }
  47. if DB <= 0 {
  48. client.msgChan <- Msg{
  49. Type: consts.SocketQueryUser,
  50. Code: consts.CodePanicErr,
  51. Msg: "玩家服务器信息获取失败",
  52. }
  53. return
  54. }
  55. data := &msg.GmPlayer{
  56. MsgId: fmt.Sprintf("qu:%d:%d", client.Id, playerId),
  57. PlayerID: playerId,
  58. OperatorId: client.claims.ID,
  59. }
  60. var resp *msg.ResponseGmPlayer
  61. res, err := config.GmNats.GmRequest(DB, "GmPlayer", data)
  62. if err != nil {
  63. client.msgChan <- Msg{
  64. Type: consts.SocketQueryUser,
  65. Code: consts.CodePanicErr,
  66. Msg: "用户查询失败 nats查询出错:" + err.Error(),
  67. }
  68. return
  69. }
  70. if err = json.Unmarshal(res, &resp); err != nil {
  71. client.msgChan <- Msg{
  72. Type: consts.SocketQueryUser,
  73. Code: consts.CodePanicErr,
  74. Msg: "用户查询失败 nats Unmarshal出错:" + err.Error(),
  75. }
  76. return
  77. }
  78. rpc_share.LogChan <- rpc_share.LogMsg{
  79. MsgID: data.MsgId,
  80. Data: resp,
  81. }
  82. }
  83. }
  84. func (client *Client) WriteResp(data []byte) (err error) {
  85. client.Lock.Lock()
  86. defer client.Lock.Unlock()
  87. if client.lastHeart < time.Now().Unix()-300 {
  88. client.c.Close()
  89. return errors.New("timeout")
  90. }
  91. err = client.c.WriteMessage(websocket.TextMessage, data)
  92. return
  93. }