mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-06-21 07:18:14 +08:00
音视频通话
This commit is contained in:
parent
4b9412f685
commit
c074921734
@ -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
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user