dM.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package v1
  2. import (
  3. v1pb "go-common/app/interface/live/web-room/api/http/v1"
  4. "go-common/app/interface/live/web-room/conf"
  5. dmrpc "go-common/app/service/live/live-dm/api/grpc/v1"
  6. risk "go-common/app/service/live/live_riskcontrol/api/grpc/v1"
  7. xcaptcha "go-common/app/service/live/xcaptcha/api/grpc/v1"
  8. "go-common/library/ecode"
  9. "go-common/library/log"
  10. bm "go-common/library/net/http/blademaster"
  11. "go-common/library/net/metadata"
  12. "strings"
  13. )
  14. // DMService struct
  15. type DMService struct {
  16. conf *conf.Config
  17. }
  18. var (
  19. //dmClient 弹幕clietn
  20. dmClient dmrpc.DMClient
  21. //riskClient 风控Client
  22. riskClient risk.IsForbiddenClient
  23. //验证码client
  24. xcaptchaClient xcaptcha.XCaptchaClient
  25. )
  26. //NewDMService init
  27. func NewDMService(c *conf.Config) (s *DMService) {
  28. s = &DMService{
  29. conf: c,
  30. }
  31. var err error
  32. if dmClient, err = dmrpc.NewClient(c.DM); err != nil {
  33. panic(err)
  34. }
  35. if riskClient, err = risk.NewClient(c.DM); err != nil {
  36. panic(err)
  37. }
  38. if xcaptchaClient, err = xcaptcha.NewClient(c.VerifyConf); err != nil {
  39. panic(err)
  40. }
  41. return s
  42. }
  43. func sendMsg(ctx *bm.Context, req *v1pb.SendDMReq, uid int64) (resp *v1pb.SendMsgResp, err error) {
  44. resp = &v1pb.SendMsgResp{}
  45. ip := metadata.String(ctx, metadata.RemoteIP)
  46. var ck = make([]string, 0, 10)
  47. for _, v := range ctx.Request.Cookies() {
  48. if v.Name != "SESSDATA" {
  49. ck = append(ck, v.Name+"="+v.Value)
  50. }
  51. }
  52. var dmReq = &dmrpc.SendMsgReq{
  53. Uid: uid,
  54. Roomid: req.Roomid,
  55. Msg: req.Msg,
  56. Rnd: req.Rnd,
  57. Ip: ip,
  58. Fontsize: req.Fontsize,
  59. Mode: req.Mode,
  60. Platform: "web",
  61. Msgtype: 0,
  62. Bubble: req.Bubble,
  63. Lancer: &dmrpc.Lancer{
  64. Build: 0,
  65. Buvid: "",
  66. Refer: ctx.Request.Header.Get("Referer"),
  67. UserAgent: ctx.Request.Header.Get("User-Agent"),
  68. Cookie: strings.Join(ck, ";"),
  69. },
  70. }
  71. gresp, gerr := dmClient.SendMsg(ctx, dmReq)
  72. if gerr != nil {
  73. log.Error("DM GRPC ERR: %v", gerr)
  74. err = ecode.Error(1003218, "系统正在维护中,请稍后尝试")
  75. return nil, err
  76. }
  77. if gresp.IsLimit {
  78. err = ecode.Error(ecode.Code(gresp.Code), gresp.LimitMsg)
  79. return nil, err
  80. }
  81. return resp, nil
  82. }
  83. // SendMsg implementation
  84. // `method:"POST"`
  85. func (s *DMService) SendMsg(ctx *bm.Context, req *v1pb.SendDMReq) (resp *v1pb.SendMsgResp, err error) {
  86. uid, ok := ctx.Get("mid")
  87. if !ok {
  88. err = ecode.Error(1003218, "未登录")
  89. return nil, err
  90. }
  91. //验证码
  92. if req.Anti != "" {
  93. result := checkVerify(ctx, req.Anti, uid.(int64), req.Roomid)
  94. if !result {
  95. return nil, ecode.Error(1990001, "验证码验证失败")
  96. }
  97. return sendMsg(ctx, req, uid.(int64))
  98. }
  99. //风控校验
  100. ifb, ferr := isriskcontrol(ctx, uid.(int64), req)
  101. if ifb {
  102. return nil, ferr
  103. }
  104. //发送弹幕
  105. return sendMsg(ctx, req, uid.(int64))
  106. }
  107. // GetHistory implementation
  108. // `method:"POST"`
  109. func (s *DMService) GetHistory(ctx *bm.Context, req *v1pb.HistoryReq) (resp *v1pb.HistoryResp, err error) {
  110. resp = &v1pb.HistoryResp{}
  111. var hreq = &dmrpc.HistoryReq{
  112. Roomid: req.Roomid,
  113. }
  114. gresp, err := dmClient.GetHistory(ctx, hreq)
  115. if err != nil {
  116. log.Error("DM GRPC ERR: %v", err)
  117. return
  118. }
  119. resp.Admin = gresp.Admin
  120. resp.Room = gresp.Room
  121. return
  122. }