From 690a5499635a21b2a46e2d15b04d5de1152033d8 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 13 May 2026 01:38:01 +0800 Subject: [PATCH] ``` ✨ feat(im): RTC 通话逻辑收口(displayName / inviteeIds 校验 / 配置化阈值) --- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcCallController.java | 17 +++++++++++++++++ yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcLiveKitController.java | 7 +++++++ yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/rtc/core/LiveKitClient.java | 3 +++ 3 files changed, 27 insertions(+), 0 deletions(-) diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcCallController.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcCallController.java index 5e1f0f2..75c5bc6 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcCallController.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcCallController.java @@ -109,6 +109,13 @@ public class ImRtcCallController { // ========== VO 拼装 ========== + /** + * 拼装 invite / join / accept / refresh-token 的响应 VO;含 token + 参与者分桶 + * + * @param call 通话主表 + * @param userId 当前用户编号;token 按该用户签发 + * @return 响应 VO;call 为空返回 null + */ private ImRtcCallRespVO buildCallResp(ImRtcCallDO call, Long userId) { if (call == null) { return null; @@ -125,6 +132,12 @@ public class ImRtcCallController { .setJoinedUserIds(filterUserIds(participants, ImRtcParticipantStatusEnum.JOINED)); } + /** + * 拼装 get-active-call 的响应 VO;只用于群聊胶囊条,不含 token + * + * @param call 通话主表 + * @return 响应 VO;call 为空返回 null + */ private ImRtcGroupCallRespVO buildGroupActiveResp(ImRtcCallDO call) { if (call == null) { return null; @@ -140,6 +153,10 @@ public class ImRtcCallController { /** * 按状态过滤参与者 userId;用 LinkedHashSet 保留前端展示顺序 + * + * @param participants 参与者列表 + * @param status 目标状态 + * @return userId 集合 */ private static Set filterUserIds(List participants, ImRtcParticipantStatusEnum status) { diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcLiveKitController.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcLiveKitController.java index c7437f0..ee89765 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcLiveKitController.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/rtc/ImRtcLiveKitController.java @@ -39,6 +39,13 @@ public class ImRtcLiveKitController { @Resource private ImRtcCallService rtcCallService; + /** + * LiveKit Webhook 回调入口 + * + * @param request HTTP 请求;用于取 Authorization 头做签名校验 + * @param rawBody 原始 JSON body;签名校验需要原始字节 + * @return 是否处理成功;伪造 / 非法事件返回 false + */ @PostMapping(value = "/webhook", consumes = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "LiveKit Webhook 回调;接收成员离开 / 房间结束等事件做业务态兜底清理") @PermitAll diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/rtc/core/LiveKitClient.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/rtc/core/LiveKitClient.java index 6f3df8d..afcebbe 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/rtc/core/LiveKitClient.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/framework/rtc/core/LiveKitClient.java @@ -54,6 +54,9 @@ public class LiveKitClient { private final ImProperties imProperties; + /** + * @param imProperties IM 全局配置;从中读 livekitUrl / apiKey / apiSecret / tokenTtlHours + */ public LiveKitClient(ImProperties imProperties) { this.imProperties = imProperties; } -- libgit2 0.21.4