Browse Source

Merge branch 'feature/0414-trtc' into master_saas

Eric 2 years ago
parent
commit
879cb47c74

+ 33 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TencentData.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.annotation.JSONField;
+import com.fasterxml.jackson.annotation.JsonProperty;
 import com.ym.mec.biz.dal.enums.ETencentGroupType;
 import com.ym.mec.biz.dal.enums.ETencentImCallbackCommand;
 import com.ym.mec.biz.dal.enums.ETencentTRTCCallbackCommand;
@@ -456,37 +457,64 @@ public class TencentData {
     }
 
 
-    @NoArgsConstructor
     @Data
-    public static class TRTCEventInfo {
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @ApiModel("腾讯云回调事件")
+    public static class TRTCEventInfo implements Serializable {
 
+        @JsonProperty("EventGroupId")
         @ApiModelProperty("事件组")
         private String eventGroupId;
+
+        @JsonProperty("EventType")
         @ApiModelProperty("事件类型")
         private ETencentTRTCCallbackCommand eventType;
+
+        @JsonProperty("CallbackTs")
         @ApiModelProperty("事件时间")
-        private Date callbackTs;
+        private Long callbackTs;
+
+        @JsonProperty("EventInfo")
         @ApiModelProperty("事件消息")
         private EventInfo eventInfo;
 
+        public String jsonString() {
+            return JSON.toJSONString(this);
+        }
     }
 
     @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
     @ApiModel("事件消息")
-    public static class EventInfo {
+    public static class EventInfo implements Serializable {
 
+        @JsonProperty("RoomId")
         @ApiModelProperty("房间号")
         private String roomId;
+
+        @JsonProperty("EventTs")
         @ApiModelProperty("事件发生时间")
-        private Date eventTs;
+        private Long eventTs;
+
+        @JsonProperty("UserId")
         @ApiModelProperty("事件发生用户")
         private String userId;
+
+        @JsonProperty("Role")
         @ApiModelProperty("用户角色")
         private String role;
+
+        @JsonProperty("TerminalType")
         @ApiModelProperty("终端类型")
         private String terminalType;
+
+        @JsonProperty("UserType")
         @ApiModelProperty("用户类型")
         private String userType;
+
+        @JsonProperty("Reason")
         @ApiModelProperty("原因")
         private String reason;
     }

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ETencentTRTCCallbackCommand.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.enums;
 
+import com.ym.mec.common.enums.BaseEnum;
 import lombok.Getter;
 
 /**
@@ -9,7 +10,7 @@ import lombok.Getter;
  * @date 2023-03-02
  */
 @Getter
-public enum ETencentTRTCCallbackCommand {
+public enum ETencentTRTCCallbackCommand implements BaseEnum<Integer, ETencentTRTCCallbackCommand> {
 
     EVENT_TYPE_CREATE_ROOM("101", "创建房间"),
     EVENT_TYPE_DISMISS_ROOM("102", "解散房间"),
@@ -20,12 +21,13 @@ public enum ETencentTRTCCallbackCommand {
     private final String command;
     private final String desc;
 
-    private final String code;
+    private final Integer code;
 
     ETencentTRTCCallbackCommand(String command, String desc) {
         this.command = command;
         this.desc = desc;
 
-        this.code = this.name();
+        // 枚举转换对象
+        this.code = Integer.parseInt(command);
     }
 }

+ 26 - 13
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -1,6 +1,5 @@
 package com.ym.controller;
 
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.common.BaseResponse;
 import com.ym.mec.biz.dal.dto.TencentData;
@@ -9,10 +8,12 @@ import com.ym.service.MessageService;
 import com.ym.service.RoomService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 
 @RestController
 @RequestMapping("/room")
@@ -110,21 +111,33 @@ public class RoomController{
     @PostMapping(value = "/statusSyncTencent")
     public void statusSyncTencent(@RequestBody TencentData.TRTCEventInfo eventInfo) {
         try {
-            log.info("statusSyncTencent: {}", JSON.toJSON(eventInfo));
+            if (Objects.isNull(eventInfo.getEventInfo())) {
+                log.warn("statusSyncTencent eventInfo is null, time={}", DateTime.now().toString("yyy-MM-dd HH:mm:ss"));
+                return;
+            }
+            log.info("statusSyncTencent: {}", eventInfo.jsonString());
             String roomId = eventInfo.getEventInfo().getRoomId();
-            String userId = eventInfo.getEventInfo().getUserId();
-            switch (eventInfo.getEventType()){
-                case EVENT_TYPE_ENTER_ROOM:
-                    //成员加入
-                    roomService.joinRoomSuccess(roomId, userId,null);
-                    break;
-                case EVENT_TYPE_EXIT_ROOM:
-                    //成员退出
-                    roomService.leaveRoomSuccess(roomId, userId,null);
-                    break;
+
+            // 网络教室回调整消息
+            if (roomId.startsWith("S") || roomId.startsWith("I")) {
+                // 进出用户信息
+                String userId = eventInfo.getEventInfo().getUserId();
+                switch (eventInfo.getEventType()){
+                    case EVENT_TYPE_ENTER_ROOM:
+                        //成员加入
+                        roomService.joinRoomSuccess(roomId, userId,null);
+                        break;
+                    case EVENT_TYPE_EXIT_ROOM:
+                        //成员退出
+                        roomService.leaveRoomSuccess(roomId, userId,null);
+                        break;
+                }
             }
+
+            // 直播回调整消息, roomId.startsWith("LIVE")
+
         }catch (Exception e){
-            log.error(e.getLocalizedMessage());
+            log.error("statusSyncTencent event={}", eventInfo.jsonString(), e);
         }
     }
 

+ 6 - 6
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -712,25 +712,25 @@ public class RoomServiceImpl implements RoomService {
             RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(rtcServiceProvider);
             if (rtcServiceProvider.equals(TencentCloudRTCPlugin.PLUGIN_NAME)) {
                 // 腾讯云RTC服务
-                RTCRoomMessage.MessageContent.MessageContentBuilder messageContentBuilder = RTCRoomMessage.MessageContent
+                RTCRoomMessage.MessageContent messageContent = RTCRoomMessage.MessageContent
                         .builder()
                         .action(EMemberAction.LEAVE.getValue())
+                        .role(EMemberRole.STUDENT.getValue())
                         .handUpOn(false)
                         .timestamp(System.currentTimeMillis())
                         .microphone(false)
                         .camera(false)
-                        .sendUserInfo(getSendUser(userId,roleEnum));
+                        .sendUserInfo(getSendUser(userId, roleEnum))
+                        .build();
 
                 if (roleEnum == RoleTeacher) {
-                    messageContentBuilder.role(EMemberRole.TEACHER.getValue());
-                } else {
-                    messageContentBuilder.role(EMemberRole.STUDENT.getValue());
+                    messageContent.setRole(EMemberRole.TEACHER.getValue());
                 }
 
                 RTCRoomMessage roomMessage = RTCRoomMessage.builder()
                         .objectName(RTCRoomMessage.MEMBER_CHANGE_MESSAGE)
                         .toChatRoomId(roomId)
-                        .content(messageContentBuilder.build())
+                        .content(messageContent)
                         .fromUserId(userId)
                         .isPersisted(1)
                         .isIncludeSender(1)