Forráskód Böngészése

feat: 多人音视频功能

xsx 1 éve
szülő
commit
378afb8278
23 módosított fájl, 84 hozzáadás és 19 törlés
  1. 1 1
      im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java
  2. 16 0
      im-platform/src/main/java/com/bx/implatform/annotation/OnlineCheck.java
  3. 43 0
      im-platform/src/main/java/com/bx/implatform/aspect/OnlineCheckAspect.java
  4. 1 1
      im-platform/src/main/java/com/bx/implatform/config/RedissonConfig.java
  5. 1 1
      im-platform/src/main/java/com/bx/implatform/controller/WebrtcGroupController.java
  6. 2 0
      im-platform/src/main/java/com/bx/implatform/controller/WebrtcPrivateController.java
  7. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupAnswerDTO.java
  8. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupCandidateDTO.java
  9. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupDeviceDTO.java
  10. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupFailedDTO.java
  11. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupInviteDTO.java
  12. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupJoinDTO.java
  13. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupOfferDTO.java
  14. 1 1
      im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupSetupDTO.java
  15. 1 1
      im-platform/src/main/java/com/bx/implatform/enums/WebrtcMode.java
  16. 4 0
      im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcGroupServiceImpl.java
  17. 1 1
      im-platform/src/main/java/com/bx/implatform/session/WebrtcGroupSession.java
  18. 1 1
      im-platform/src/main/java/com/bx/implatform/session/WebrtcUserInfo.java
  19. 1 1
      im-platform/src/main/java/com/bx/implatform/util/UserStateUtils.java
  20. 1 1
      im-platform/src/main/java/com/bx/implatform/vo/OnlineTerminalVO.java
  21. 1 1
      im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupFailedVO.java
  22. 1 1
      im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupInfoVO.java
  23. 1 1
      im-uniapp/manifest.json

+ 1 - 1
im-commom/src/main/java/com/bx/imcommon/model/IMUserInfo.java

@@ -5,7 +5,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2023-09-24 09:23:11
  * @version: 1.0
  */

+ 16 - 0
im-platform/src/main/java/com/bx/implatform/annotation/OnlineCheck.java

@@ -0,0 +1,16 @@
+package com.bx.implatform.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.util.concurrent.TimeUnit;
+
+/**
+ *  在线校验,标注此注解的接口用户必须保持长连接,否则将抛异常
+ */
+@Retention(RetentionPolicy.RUNTIME)//运行时生效
+@Target(ElementType.METHOD)//作用在方法上
+public @interface OnlineCheck {
+
+}

+ 43 - 0
im-platform/src/main/java/com/bx/implatform/aspect/OnlineCheckAspect.java

@@ -0,0 +1,43 @@
+package com.bx.implatform.aspect;
+
+import cn.hutool.core.util.StrUtil;
+import com.bx.imclient.IMClient;
+import com.bx.implatform.annotation.RedisLock;
+import com.bx.implatform.exception.GlobalException;
+import com.bx.implatform.session.SessionContext;
+import com.bx.implatform.session.UserSession;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.redisson.api.RLock;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author: blue
+ * @date: 2024-06-16
+ * @version: 1.0
+ */
+@Slf4j
+@Aspect
+@Component
+@RequiredArgsConstructor
+public class OnlineCheckAspect {
+
+    private final IMClient imClient;
+
+    @Around("@annotation(com.bx.implatform.annotation.OnlineCheck)")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        UserSession session = SessionContext.getSession();
+        if(!imClient.isOnline(session.getUserId())){
+            throw new GlobalException("您当前的网络连接已断开,请稍后重试");
+        }
+        return joinPoint.proceed();
+    }
+
+}

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/config/RedissonConfig.java

@@ -13,7 +13,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-09
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/controller/WebrtcGroupController.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 2 - 0
im-platform/src/main/java/com/bx/implatform/controller/WebrtcPrivateController.java

@@ -1,5 +1,6 @@
 package com.bx.implatform.controller;
 
+import com.bx.implatform.annotation.OnlineCheck;
 import com.bx.implatform.config.ICEServer;
 import com.bx.implatform.result.Result;
 import com.bx.implatform.result.ResultUtils;
@@ -19,6 +20,7 @@ public class WebrtcPrivateController {
 
     private final IWebrtcPrivateService webrtcPrivateService;
 
+    @OnlineCheck
     @ApiOperation(httpMethod = "POST", value = "呼叫视频通话")
     @PostMapping("/call")
     public Result call(@RequestParam Long uid, @RequestParam(defaultValue = "video") String mode, @RequestBody String offer) {

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupAnswerDTO.java

@@ -8,7 +8,7 @@ import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupCandidateDTO.java

@@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupDeviceDTO.java

@@ -8,7 +8,7 @@ import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupFailedDTO.java

@@ -7,7 +7,7 @@ import lombok.Data;
 import javax.validation.constraints.NotNull;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupInviteDTO.java

@@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupJoinDTO.java

@@ -8,7 +8,7 @@ import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupOfferDTO.java

@@ -8,7 +8,7 @@ import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/dto/WebrtcGroupSetupDTO.java

@@ -10,7 +10,7 @@ import javax.validation.constraints.NotNull;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/enums/WebrtcMode.java

@@ -4,7 +4,7 @@ import lombok.AllArgsConstructor;
 import lombok.Getter;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 4 - 0
im-platform/src/main/java/com/bx/implatform/service/impl/WebrtcGroupServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.bx.imclient.IMClient;
 import com.bx.imcommon.model.IMGroupMessage;
 import com.bx.imcommon.model.IMUserInfo;
+import com.bx.implatform.annotation.OnlineCheck;
 import com.bx.implatform.annotation.RedisLock;
 import com.bx.implatform.config.WebrtcConfig;
 import com.bx.implatform.contant.RedisKey;
@@ -55,6 +56,7 @@ public class WebrtcGroupServiceImpl implements IWebrtcGroupService {
     private final WebrtcConfig webrtcConfig;
 
 
+    @OnlineCheck
     @RedisLock(prefixKey = RedisKey.IM_LOCK_RTC_GROUP, key = "#dto.groupId")
     @Override
     public void setup(WebrtcGroupSetupDTO dto) {
@@ -200,6 +202,7 @@ public class WebrtcGroupServiceImpl implements IWebrtcGroupService {
         log.info("群通话失败,userId:{},groupId:{},原因:{}", userSession.getUserId(), dto.getReason());
     }
 
+    @OnlineCheck
     @RedisLock(prefixKey = RedisKey.IM_LOCK_RTC_GROUP, key = "#groupId")
     @Override
     public void join(Long groupId) {
@@ -239,6 +242,7 @@ public class WebrtcGroupServiceImpl implements IWebrtcGroupService {
         log.info("加入群通话,userId:{},groupId:{}", userSession.getUserId(), groupId);
     }
 
+    @OnlineCheck
     @RedisLock(prefixKey = RedisKey.IM_LOCK_RTC_GROUP, key = "#dto.groupId")
     @Override
     public void invite(WebrtcGroupInviteDTO dto) {

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/session/WebrtcGroupSession.java

@@ -7,7 +7,7 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-01
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/session/WebrtcUserInfo.java

@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-02
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/util/UserStateUtils.java

@@ -10,7 +10,7 @@ import org.springframework.stereotype.Component;
 import java.util.concurrent.TimeUnit;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-10
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/vo/OnlineTerminalVO.java

@@ -7,7 +7,7 @@ import lombok.Data;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2023-10-28 21:17:59
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupFailedVO.java

@@ -7,7 +7,7 @@ import lombok.Data;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-09
  * @version: 1.0
  */

+ 1 - 1
im-platform/src/main/java/com/bx/implatform/vo/WebrtcGroupInfoVO.java

@@ -8,7 +8,7 @@ import lombok.Data;
 import java.util.List;
 
 /**
- * @author: 谢绍许
+ * @author: Blue
  * @date: 2024-06-09
  * @version: 1.0
  */

+ 1 - 1
im-uniapp/manifest.json

@@ -100,7 +100,7 @@
     /* 小程序特有相关 */
     "mp-weixin" : {
         "appid" : "wxda94f40bfad0262c",
-		"libVersion": "latest",  
+        "libVersion" : "latest",
         "setting" : {
             "urlCheck" : false
         },