From 63cfbad65c93fa67566b949c18b1b14296b98b2c Mon Sep 17 00:00:00 2001 From: lafay <2021211506@stu.hit.edu.cn> Date: Sat, 28 Mar 2026 01:01:22 +0800 Subject: [PATCH] feat(call): add media type support to call invite functionality - Updated the WSHandler to include a media type field in the call invite request, allowing differentiation between voice and video calls. - Modified the CallService interface and implementation to accept the media type parameter during call invitations, enhancing call handling capabilities. --- internal/handler/ws_handler.go | 9 ++++++++- internal/service/call_service.go | 5 +++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/internal/handler/ws_handler.go b/internal/handler/ws_handler.go index 3b81e87..97bf9c5 100644 --- a/internal/handler/ws_handler.go +++ b/internal/handler/ws_handler.go @@ -450,6 +450,7 @@ func (h *WSHandler) handleCallInvite(ctx context.Context, client *ws.Client, pay var req struct { CalleeID string `json:"callee_id"` ConversationID string `json:"conversation_id"` + MediaType string `json:"call_type"` // voice 或 video } if err := json.Unmarshal(payload, &req); err != nil { h.wsHub.SendError(client, "parse_error", "invalid call_invite format") @@ -460,7 +461,13 @@ func (h *WSHandler) handleCallInvite(ctx context.Context, client *ws.Client, pay return } - call, err := h.callService.Invite(ctx, client.UserID, req.CalleeID, req.ConversationID) + // 前端传的 call_type 是 voice/video,默认为 voice + mediaType := req.MediaType + if mediaType != "video" { + mediaType = "voice" + } + + call, err := h.callService.Invite(ctx, client.UserID, req.CalleeID, req.ConversationID, mediaType) if err != nil { zap.L().Warn("Failed to invite call", zap.String("caller_id", client.UserID), diff --git a/internal/service/call_service.go b/internal/service/call_service.go index c60f4b4..224a19a 100644 --- a/internal/service/call_service.go +++ b/internal/service/call_service.go @@ -33,7 +33,7 @@ const ( // CallService 通话服务接口 type CallService interface { - Invite(ctx context.Context, callerID, calleeID, conversationID string) (*model.CallSession, error) + Invite(ctx context.Context, callerID, calleeID, conversationID, mediaType string) (*model.CallSession, error) Accept(ctx context.Context, callID, userID string) (*model.CallSession, error) Reject(ctx context.Context, callID, userID string) error Busy(ctx context.Context, callID, userID string) error @@ -72,7 +72,7 @@ func NewCallService( return svc } -func (s *callService) Invite(ctx context.Context, callerID, calleeID, conversationID string) (*model.CallSession, error) { +func (s *callService) Invite(ctx context.Context, callerID, calleeID, conversationID, mediaType string) (*model.CallSession, error) { // === Telegram: 检查被叫方是否在线 === if !s.hub.HasClients(calleeID) { return nil, ErrCalleeOffline @@ -113,6 +113,7 @@ func (s *callService) Invite(ctx context.Context, callerID, calleeID, conversati "conversation_id": conversationID, "caller_id": callerID, "call_type": call.CallType, + "media_type": mediaType, "created_at": now.UnixMilli(), "lifetime": CallLifetimeMs, "ice_servers": s.config.WebRTC.ICEServers,