innerserver.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Code generated by goctl. DO NOT EDIT!
  2. // Source: inner.proto
  3. package server
  4. import (
  5. "context"
  6. "encoding/json"
  7. "github.com/Shopify/sarama"
  8. "github.com/zeromicro/go-zero/core/logx"
  9. gozerotrace "github.com/zeromicro/go-zero/core/trace"
  10. "go.opentelemetry.io/otel"
  11. "go.opentelemetry.io/otel/attribute"
  12. "go.opentelemetry.io/otel/propagation"
  13. oteltrace "go.opentelemetry.io/otel/trace"
  14. "net/http"
  15. "ylink/comm/ds/treemap"
  16. "ylink/comm/kafka"
  17. "ylink/comm/model"
  18. "ylink/comm/trace"
  19. "ylink/comm/utils"
  20. "ylink/core/inner/rpc/internal/ext"
  21. "ylink/core/inner/rpc/internal/logic"
  22. "ylink/core/inner/rpc/internal/svc"
  23. "ylink/core/inner/rpc/pb"
  24. )
  25. type InnerServer struct {
  26. svcCtx *svc.ServiceContext
  27. pb.UnimplementedInnerServer
  28. ConsumerGroup *kafka.ConsumerGroup
  29. }
  30. func NewInnerServer(svcCtx *svc.ServiceContext) *InnerServer {
  31. server := &InnerServer{
  32. svcCtx: svcCtx,
  33. ConsumerGroup: kafka.NewConsumerGroup(&kafka.ConsumerGroupConfig{
  34. KafkaVersion: sarama.V1_0_0_0,
  35. OffsetsInitial: sarama.OffsetNewest,
  36. IsReturnErr: false,
  37. },
  38. svcCtx.Config.KqMsgBoxConsumerConf.Brokers,
  39. []string{svcCtx.Config.KqMsgBoxConsumerConf.Topic},
  40. svcCtx.Config.KqMsgBoxConsumerConf.GroupId),
  41. }
  42. server.subscribe()
  43. return server
  44. }
  45. func (s *InnerServer) PlayerFetchCsInfo(ctx context.Context, in *pb.InnerPlayerFetchCsInfoReq) (*pb.InnerPlayerFetchCsInfoResp, error) {
  46. l := logic.NewPlayerFetchCsInfoLogic(ctx, s.svcCtx)
  47. return l.PlayerFetchCsInfo(in)
  48. }
  49. func (s *InnerServer) PlayerDisconnect(ctx context.Context, in *pb.InnerPlayerDisconnectReq) (*pb.InnerPlayerDisconnectResp, error) {
  50. l := logic.NewPlayerDisconnectLogic(ctx, s.svcCtx)
  51. return l.PlayerDisconnect(in)
  52. }
  53. func (s *InnerServer) CsFetchPlayerQueue(ctx context.Context, in *pb.InnerCsFetchPlayerQueueReq) (*pb.InnerCsFetchPlayerQueueResp, error) {
  54. l := logic.NewCsFetchPlayerQueueLogic(ctx, s.svcCtx)
  55. return l.CsFetchPlayerQueue(in)
  56. }
  57. func (s *InnerServer) CsConnectPlayer(ctx context.Context, in *pb.InnerCsConnectPlayerReq) (*pb.InnerCsConnectPlayerResp, error) {
  58. l := logic.NewCsConnectPlayerLogic(ctx, s.svcCtx)
  59. return l.CsConnectPlayer(in)
  60. }
  61. func (s *InnerServer) Setup(_ sarama.ConsumerGroupSession) error {
  62. return nil
  63. }
  64. func (s *InnerServer) Cleanup(_ sarama.ConsumerGroupSession) error {
  65. return nil
  66. }
  67. func (s *InnerServer) ConsumeClaim(sess sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
  68. for msg := range claim.Messages() {
  69. if msg.Topic == s.svcCtx.Config.KqMsgBoxConsumerConf.Topic {
  70. s.handleMessage(sess, msg)
  71. }
  72. }
  73. return nil
  74. }
  75. func (s *InnerServer) runWithCtx(callback func(ctx context.Context), kv ...attribute.KeyValue) {
  76. propagator := otel.GetTextMapPropagator()
  77. tracer := otel.GetTracerProvider().Tracer(gozerotrace.TraceName)
  78. ctx := propagator.Extract(context.Background(), propagation.HeaderCarrier(http.Header{}))
  79. spanName := utils.CallerFuncName()
  80. spanCtx, span := tracer.Start(ctx, spanName, oteltrace.WithSpanKind(oteltrace.SpanKindServer), oteltrace.WithAttributes(kv...))
  81. defer span.End()
  82. propagator.Inject(spanCtx, propagation.HeaderCarrier(http.Header{}))
  83. callback(spanCtx)
  84. }
  85. func (s *InnerServer) handleMessage(sess sarama.ConsumerGroupSession, msg *sarama.ConsumerMessage) {
  86. traceId := kafka.GetTraceFromHeader(msg.Headers)
  87. if len(traceId) == 0 {
  88. return
  89. }
  90. trace.RunOnTracing(traceId, func(ctx context.Context) {
  91. var message model.KqMessage
  92. if err := json.Unmarshal(msg.Value, &message); err != nil {
  93. logx.WithContext(ctx).Errorf("unmarshal msg error: %v", err)
  94. return
  95. }
  96. trace.StartTrace(ctx, "InnerServer.handleMessage.SendMessage", func(ctx context.Context) {
  97. if len(message.ReceiverId) == 0 || message.ReceiverId == "" {
  98. // 玩家发的消息
  99. p2cMap := ext.IdMap.Get(message.GameId).(*treemap.Map)
  100. message.ReceiverId = p2cMap.Get(message.SenderId).(string)
  101. logx.WithContext(ctx).Infof("receiver: %s", message.ReceiverId)
  102. kMsg, _ := json.Marshal(message)
  103. s.svcCtx.KqMsgBoxProducer.SendMessage(ctx, string(kMsg), message.ReceiverId)
  104. } else {
  105. s.svcCtx.KqMsgBoxProducer.SendMessage(ctx, string(msg.Value), message.ReceiverId)
  106. }
  107. sess.MarkMessage(msg, "")
  108. }, attribute.String("msg.key", string(msg.Key)))
  109. })
  110. //s.runWithCtx(func(ctx context.Context) {
  111. // var message model.KqCmdMessage
  112. // if err := json.Unmarshal(msg.Value, &message); err != nil {
  113. // logx.WithContext(ctx).Errorf("unmarshal msg error: %v", err)
  114. // return
  115. // }
  116. // trace.StartTrace(ctx, "InnerServer.handleMessage.SendMessage", func(ctx context.Context) {
  117. // if len(message.ReceiverId) == 0 || message.ReceiverId == "" {
  118. // // 玩家发的消息
  119. // p2cMap := ext.IdMap.Get(message.GameId).(*treemap.Map)
  120. // message.ReceiverId = p2cMap.Get(message.SenderId).(string)
  121. // logx.Infof("receiver: %s", message.ReceiverId)
  122. // b, _ := json.Marshal(message)
  123. // s.svcCtx.KqMsgBoxProducer.SendMessage(ctx, string(b), message.ReceiverId)
  124. // } else {
  125. // s.svcCtx.KqMsgBoxProducer.SendMessage(ctx, string(msg.Value), message.ReceiverId)
  126. // }
  127. // sess.MarkMessage(msg, "")
  128. // }, attribute.String("msg.key", string(msg.Key)))
  129. //})
  130. }
  131. func (s *InnerServer) subscribe() {
  132. go s.ConsumerGroup.RegisterHandleAndConsumer(s)
  133. }