diff --git a/internal/msggateway/message_handler.go b/internal/msggateway/message_handler.go index 1135b7f3e..2706540a0 100644 --- a/internal/msggateway/message_handler.go +++ b/internal/msggateway/message_handler.go @@ -17,9 +17,10 @@ package msggateway import ( "context" "encoding/json" - "github.com/openimsdk/open-im-server/v3/pkg/rpcli" "sync" + "github.com/openimsdk/open-im-server/v3/pkg/rpcli" + "github.com/go-playground/validator/v10" "google.golang.org/protobuf/proto" @@ -28,6 +29,7 @@ import ( "github.com/openimsdk/protocol/rtc" "github.com/openimsdk/protocol/sdkws" "github.com/openimsdk/tools/errs" + "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/utils/jsonutil" ) @@ -176,17 +178,28 @@ func (g *GrpcHandler) SendMessage(ctx context.Context, data *Req) ([]byte, error } func (g *GrpcHandler) SendSignalMessage(ctx context.Context, data *Req) ([]byte, error) { - var req rtc.SignalMessageAssembleReq - if err := proto.Unmarshal(data.Data, &req); err != nil { - return nil, errs.WrapMsg(err, "SendSignalMessage: error unmarshaling request", "action", "unmarshal", "dataType", "SignalMessageAssembleReq") + // SDK 长连接发送的是 proto.Marshal(SignalReq);HTTP/gRPC 侧使用 SignalMessageAssembleReq 包装。 + var assembleReq rtc.SignalMessageAssembleReq + if err := proto.Unmarshal(data.Data, &assembleReq); err != nil || assembleReq.SignalReq == nil { + var signalReq rtc.SignalReq + if err2 := proto.Unmarshal(data.Data, &signalReq); err2 != nil { + log.ZError(ctx, "SendSignalMessage", err2, "r", err2.Error()) + return nil, errs.WrapMsg(err2, "SendSignalMessage: error unmarshaling request", "action", "unmarshal", "dataType", "SignalReq") + } + assembleReq.SignalReq = &signalReq } - resp, err := g.rtcClient.RtcServiceClient.SignalMessageAssemble(ctx, &req) + resp, err := g.rtcClient.RtcServiceClient.SignalMessageAssemble(ctx, &assembleReq) if err != nil { + log.ZError(ctx, "SendSignalMessage", err, "r", err.Error()) return nil, err } - c, err := proto.Marshal(resp) + if resp == nil || resp.SignalResp == nil { + return nil, errs.WrapMsg(errs.ErrInternalServer.WrapMsg("empty signal response"), "SendSignalMessage") + } + c, err := proto.Marshal(resp.SignalResp) if err != nil { - return nil, errs.WrapMsg(err, "SendSignalMessage: error marshaling response", "action", "marshal", "dataType", "SignalMessageAssembleResp") + log.ZError(ctx, "SendSignalMessage", err, "r", err.Error()) + return nil, errs.WrapMsg(err, "SendSignalMessage: error marshaling response", "action", "marshal", "dataType", "SignalResp") } return c, nil } diff --git a/internal/rpc/rtc/signal.go b/internal/rpc/rtc/signal.go index 33d73bdb3..6c035f0d4 100644 --- a/internal/rpc/rtc/signal.go +++ b/internal/rpc/rtc/signal.go @@ -47,6 +47,7 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe ) switch payload := req.SignalReq.Payload.(type) { case *rtc.SignalReq_Invite: + log.ZDebug(ctx, "SignalMessageAssemble", "handleInvite", "payload", payload) r, err := s.handleInvite(ctx, payload.Invite, req.SignalReq) resp.Payload = &rtc.SignalResp_Invite{Invite: r} respErr = err @@ -75,9 +76,11 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe resp.Payload = &rtc.SignalResp_GetTokenByRoomID{GetTokenByRoomID: r} respErr = err default: + log.ZError(ctx, "SignalMessageAssemble", respErr, "r", respErr.Error()) return nil, errs.ErrArgs.WrapMsg("unknown signal payload type") } if respErr != nil { + log.ZError(ctx, "SignalMessageAssemble", respErr, "r", respErr.Error()) return nil, respErr } return &rtc.SignalMessageAssembleResp{SignalResp: &resp}, nil @@ -87,6 +90,7 @@ func (s *rtcServer) SignalMessageAssemble(ctx context.Context, req *rtc.SignalMe func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, signalReq *rtc.SignalReq) (*rtc.SignalInviteResp, error) { inv := req.Invitation if inv == nil { + log.ZError(ctx, "handleInvite", errs.ErrArgs, "r", "invitation is nil") return nil, errs.ErrArgs.WrapMsg("invitation is nil") } if inv.RoomID == "" { @@ -96,11 +100,13 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, inv.InitiateTime = time.Now().UnixMilli() if _, err := s.roomClient.CreateRoom(ctx, &livekit.CreateRoomRequest{Name: inv.RoomID}); err != nil { + log.ZError(ctx, "handleInvite", err, "r", err.Error()) return nil, errs.WrapMsg(err, "LiveKit CreateRoom failed", "roomID", inv.RoomID) } token, err := s.genToken(inv.RoomID, req.UserID) if err != nil { + log.ZError(ctx, "handleInvite", err, "r", err.Error()) return nil, err } @@ -115,6 +121,7 @@ func (s *rtcServer) handleInvite(ctx context.Context, req *rtc.SignalInviteReq, } } + log.ZDebug(ctx, "handleInvite", "token", token, "roomID", inv.RoomID, "liveURL", s.config.RpcConfig.LiveKit.ExternalAddress) return &rtc.SignalInviteResp{ Token: token, RoomID: inv.RoomID,