ソースを参照

Merge branch 'feature/0414-trtc' into master_saas

Eric 2 年 前
コミット
c0fa5170cf
1 ファイル変更185 行追加49 行削除
  1. 185 49
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

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

@@ -554,12 +554,9 @@ public class RoomServiceImpl implements RoomService {
             }
             action.handUpOn(roomMember.isHand())
                     .microphone(playMidi)
+                    .timestamp(curTime.getTime())
                     .camera(true)
-                    .sendUserInfo(RTCRoomMessage.MessageUser.builder()
-                            .sendUserId(userId)
-                            .sendUserName(userInfo.getName())
-                            .avatarUrl(roomMember.getHeadUrl())
-                            .build());
+                    .sendUserInfo(getSendUser(userId,roleEnum));
 
 
             RTCRoomMessage roomMessage = RTCRoomMessage.builder()
@@ -628,6 +625,12 @@ public class RoomServiceImpl implements RoomService {
         return roomMember;
     }
 
+    public String getRoomServiceProviter(String roomId ) {
+        Integer firstCourseId = Integer.parseInt(roomId.substring(1));
+        CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
+        return courseSchedule.getServiceProvider();
+    }
+
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     @Override
     public void leaveRoomSuccess(String roomId, String userId, String deviceNum) throws Exception {
@@ -703,12 +706,9 @@ public class RoomServiceImpl implements RoomService {
                     action.role(EMemberRole.STUDENT.getValue());
                 }
                 action.handUpOn(false)
+                        .timestamp(System.currentTimeMillis())
                       .microphone(false)
-                      .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
-                                .sendUserId(userId)
-                                .sendUserName(username)
-                                .avatarUrl(sysUser.getAvatar())
-                                .build());
+                      .camera(false).sendUserInfo(getSendUser(userId,roleEnum));
 
 
                 RTCRoomMessage roomMessage = RTCRoomMessage.builder()
@@ -855,14 +855,11 @@ public class RoomServiceImpl implements RoomService {
         // 腾讯云RTC服务
         RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
                 .action(status)
+                .timestamp(System.currentTimeMillis())
                 .role(roomMember.getRole());
         action.handUpOn(false)
                 .microphone(false)
-                .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
-                        .sendUserId(roomMember.getUid())
-                        .sendUserName(roomMember.getName())
-                        .avatarUrl(roomMember.getHeadUrl())
-                        .build());
+                .camera(false).sendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
 
 
         RTCRoomMessage roomMessage = RTCRoomMessage.builder()
@@ -887,14 +884,22 @@ public class RoomServiceImpl implements RoomService {
         CheckUtils.checkArgument(type >= 0 && type < DisplayEnum.values().length, "type not exist");
         DisplayEnum displayEnum = DisplayEnum.values()[type];
 
+        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+
+        String roomServiceProviter = getRoomServiceProviter(roomId);
         if (displayEnum.equals(DisplayEnum.None)) {
             roomDao.updateDisplayByRid(roomId, "");
-            DisplayMessage displayMessage = new DisplayMessage("");
-            IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, displayMessage);
-            if (apiResultInfo.isSuccess()) {
-                return true;
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage("", roomMember);
             } else {
-                throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR, apiResultInfo.getErrorMessage());
+                DisplayMessage displayMessage = new DisplayMessage("");
+                IMApiResultInfo apiResultInfo = imHelper.publishMessage(userId, roomId, displayMessage);
+                if (apiResultInfo.isSuccess()) {
+                    return true;
+                } else {
+                    throw new ApiException(ErrorEnum.ERR_MESSAGE_ERROR, apiResultInfo.getErrorMessage());
+                }
             }
         }
 
@@ -906,9 +911,15 @@ public class RoomServiceImpl implements RoomService {
             } else {
                 display += "?userId=" + teachers.get(0).getUid() + "?uri=";
                 roomDao.updateDisplayByRid(roomId, display);
-                DisplayMessage displayMessage = new DisplayMessage(display);
-                imHelper.publishMessage(userId, roomId, displayMessage);
+                if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                    sendDisplayMessage(display, roomMember);
+                } else {
+                    DisplayMessage displayMessage = new DisplayMessage(display);
+                    imHelper.publishMessage(userId, roomId, displayMessage);
+                }
                 log.info("change display to teacher: roomId={}, display={}", roomId, display);
+
             }
         } else if (displayEnum.equals(DisplayEnum.Assistant)) {
             List<RoomMember> assistants = roomMemberDao.findByRidAndRole(roomId, RoleEnum.RoleAssistant.getValue());
@@ -917,34 +928,89 @@ public class RoomServiceImpl implements RoomService {
             } else {
                 display += "?userId=" + assistants.get(0).getUid() + "?uri=";
                 roomDao.updateDisplayByRid(roomId, display);
-                DisplayMessage displayMessage = new DisplayMessage(display);
-                imHelper.publishMessage(userId, roomId, displayMessage);
+                if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                    sendDisplayMessage(display, roomMember);
+                } else {
+                    DisplayMessage displayMessage = new DisplayMessage(display);
+                    imHelper.publishMessage(userId, roomId, displayMessage);
+                }
                 log.info("change display to assistant: roomId={}, display={}", roomId, display);
             }
         } else if (displayEnum.equals(DisplayEnum.Screen)) {
             display += "?userId=" + userId + "?uri=";
             roomDao.updateDisplayByRid(roomId, display);
-            DisplayMessage displayMessage = new DisplayMessage(display);
-            imHelper.publishMessage(userId, roomId, displayMessage);
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage(display, roomMember);
+            } else {
+                DisplayMessage displayMessage = new DisplayMessage(display);
+                imHelper.publishMessage(userId, roomId, displayMessage);
+            }
             log.info("change display to screen: roomId={}, display={}", roomId, display);
         } else if (displayEnum.equals(DisplayEnum.STUDENT)) {
             display += "?userId=" + targetUserId + "?uri=" + uri;
             roomDao.updateDisplayByRid(roomId, display);
-            DisplayMessage displayMessage = new DisplayMessage(display);
-            imHelper.publishMessage(userId, roomId, displayMessage);
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage(display, roomMember);
+            } else {
+                DisplayMessage displayMessage = new DisplayMessage(display);
+                imHelper.publishMessage(userId, roomId, displayMessage);
+            }
             log.info("change display to screen: roomId={}, display={}", roomId, display);
         } else {
             display += "?userId=" + userId + "?uri=" + uri;
 //            CheckUtils.checkArgument(uri != null, "uri must't be null");
 //            CheckUtils.checkArgument(whiteboardDao.findByRidAndWbid(roomId, uri).size() > 0, "whiteboard not exist");
-            roomDao.updateDisplayByRid(roomId, display);
-            DisplayMessage displayMessage = new DisplayMessage(display);
-            imHelper.publishMessage(userId, roomId, displayMessage);
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage(display, roomMember);
+            } else {
+                roomDao.updateDisplayByRid(roomId, display);
+                DisplayMessage displayMessage = new DisplayMessage(display);
+                imHelper.publishMessage(userId, roomId, displayMessage);
+            }
         }
         log.info("result display in room: {}, type = {}, uri = {}", roomId, type, uri);
         return true;
     }
 
+    private void sendDisplayMessage(String display, RoomMember roomMember) throws Exception {
+        // 获取RTC服务提供方
+        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
+        // 腾讯云RTC服务
+        RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
+                .display(display)
+                .sendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
+
+
+        RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                .objectName(RTCRoomMessage.DISPLAY_MESSAGE)
+                .content(action.build())
+                .toChatRoomId(roomMember.getRid())
+                .fromUserId(roomMember.getUid())
+                .isIncludeSender(1)
+                .isPersisted(1)
+                .build();
+
+        pluginService.sendChatRoomMessage(roomMessage);
+    }
+
+    private RTCRoomMessage.MessageUser getSendUser(String userId,RoleEnum role) {
+
+        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
+        RTCRoomMessage.MessageUser build = RTCRoomMessage.MessageUser.builder()
+                .sendUserId(userId)
+                .sendUserName(sysUser.getUsername())
+                .avatarUrl(sysUser.getAvatar())
+                .build();
+        if (role == RoleTeacher) {
+            build.setSendUserName(sysUser.getRealName());
+        }
+        return build;
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String createWhiteBoard(String roomId) throws Exception {
@@ -978,8 +1044,17 @@ public class RoomServiceImpl implements RoomService {
             imHelper.publishMessage(userId, roomId, wbmsg);
             String display = "display://type=2?userId=" + userId + "?uri=" + wbId;
             roomDao.updateDisplayByRid(roomId, display);
-            DisplayMessage displayMessage = new DisplayMessage(display);
-            imHelper.publishMessage(userId, roomId, displayMessage, 1);
+
+            RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+
+            String roomServiceProviter = getRoomServiceProviter(roomId);
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage(display, roomMember);
+            } else {
+                DisplayMessage displayMessage = new DisplayMessage(display);
+                imHelper.publishMessage(userId, roomId, displayMessage, 1);
+            }
 
             return wbId;
         } else {
@@ -1007,8 +1082,17 @@ public class RoomServiceImpl implements RoomService {
         if (display.contains("uri=" + whiteBoardId)) {
             int result = roomDao.updateDisplayByRid(roomId, "");
             log.info("clear room display, room: {}, result: {}", roomId, result);
-            DisplayMessage displayMessage = new DisplayMessage("");
-            imHelper.publishMessage(userId, roomId, displayMessage, 1);
+
+            RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+
+            String roomServiceProviter = getRoomServiceProviter(roomId);
+            if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+                sendDisplayMessage(display, roomMember);
+            } else {
+                DisplayMessage displayMessage = new DisplayMessage("");
+                imHelper.publishMessage(userId, roomId, displayMessage, 1);
+            }
         } else {
             log.info("no display to clean: room={}", room);
         }
@@ -1197,7 +1281,14 @@ public class RoomServiceImpl implements RoomService {
                 deviceResourceMessage.setSoundVolume(data.getSoundVolume());
                 //原音
                 courseScheduleStudentMusicScoreDao.openPlayStatus(scheduleId, data.getMusicScoreAccompanimentId(), Integer.parseInt(userId));
-                imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+                // 消息发送
+                if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
+                    // 腾讯云推送
+                    pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
+                } else {
+                    // 融云推送
+                    imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+                }
             } else if (typeEnum.equals(DeviceTypeEnum.MusicScoreAccompaniment)) {
                 long scheduleId = Long.parseLong(roomId.substring(1));
                 //关闭所有曲目播放
@@ -1206,8 +1297,14 @@ public class RoomServiceImpl implements RoomService {
                 DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
                 deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
                 deviceResourceMessage.setUserId(userId);
-                deviceResourceMessage.setSoundVolume(data.getSoundVolume());
-                imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+                deviceResourceMessage.setSoundVolume(data.getSoundVolume());// 消息发送
+                if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
+                    // 腾讯云推送
+                    pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
+                } else {
+                    // 融云推送
+                    imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+                }
             } else {
                 String ticket = IdentifierUtils.uuid();
                 ControlDeviceTaskInfo taskInfo = new ControlDeviceTaskInfo();
@@ -1453,11 +1550,7 @@ public class RoomServiceImpl implements RoomService {
                 .builder()
                 .type(deviceResourceMessage.getType())
                 .enable(deviceResourceMessage.isEnable())
-                .sendUserInfo(RTCRoomMessage.MessageUser.builder()
-                        .sendUserId(authUser.getId().toString())
-                        .sendUserName(authUser.getRealName())
-                        .avatarUrl(authUser.getAvatar())
-                        .build())
+                .sendUserInfo(getSendUser(authUser.getId().toString(), RoleTeacher))
                 .build();
 
         // 腾讯云消息推送
@@ -1807,9 +1900,18 @@ public class RoomServiceImpl implements RoomService {
         imHelper.publishMessage(userId, roomId, msg, 1);
 
         String display = "display://type=1?userId=" + targetUserId + "?uri=";
-        DisplayMessage displayMessage = new DisplayMessage(display);
+
+        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+
+        String roomServiceProviter = getRoomServiceProviter(roomId);
         roomDao.updateDisplayByRid(roomId, display);
-        imHelper.publishMessage(userId, roomId, displayMessage, 1);
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+            sendDisplayMessage(display, roomMember);
+        } else {
+            DisplayMessage displayMessage = new DisplayMessage(display);
+            imHelper.publishMessage(userId, roomId, displayMessage, 1);
+        }
         log.info("changeRole, display changed: roomId={}, {}, targetUserId={}", roomId, display, targetUserId);
 
         return true;
@@ -1899,8 +2001,33 @@ public class RoomServiceImpl implements RoomService {
         String roomId = playMidiMessageData.getRoomId();
         CustomMessage customMessage = JSONObject.parseObject(content, CustomMessage.class);
         String userId = sysUser.getId().toString();
-        MetronomeMessageMessage displayMessage = new MetronomeMessageMessage(customMessage);
-        imHelper.publishMessage(userId, roomId, displayMessage, 1);
+
+        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+
+        String roomServiceProviter = getRoomServiceProviter(roomId);
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+            // 获取RTC服务提供方
+            RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
+            // 腾讯云RTC服务
+
+            RTCRoomMessage.MessageContent messageContent = JSONObject.parseObject(content, RTCRoomMessage.MessageContent.class);
+            messageContent.setSendUserInfo(getSendUser(roomMember.getUid(),RoleEnum.getEnumByValue(roomMember.getRole())));
+
+
+            RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                    .objectName(RTCRoomMessage.PLAY_MIDI_MESSAGE)
+                    .content(messageContent)
+                    .toChatRoomId(roomMember.getRid())
+                    .fromUserId(roomMember.getUid())
+                    .isIncludeSender(1)
+                    .isPersisted(1)
+                    .build();
+
+            pluginService.sendChatRoomMessage(roomMessage);
+        } else {
+            MetronomeMessageMessage displayMessage = new MetronomeMessageMessage(customMessage);
+            imHelper.publishMessage(userId, roomId, displayMessage, 1);
+        }
         //记录节拍器消息
         courseScheduleStudentPaymentDao.adjustPlayMidi(Long.parseLong(roomId.substring(1)), playMidiMessageData.getUserId(), content);
     }
@@ -2034,8 +2161,17 @@ public class RoomServiceImpl implements RoomService {
 
     public void updateDisplay(String roomId, String senderId, String display, Integer isIncludeSender) throws Exception {
         roomDao.updateDisplayByRid(roomId, display);
-        DisplayMessage displayMessage = new DisplayMessage(display);
-        imHelper.publishMessage(senderId, roomId, displayMessage, isIncludeSender);
+
+        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, senderId);
+
+        String roomServiceProviter = getRoomServiceProviter(roomId);
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(roomServiceProviter)) {
+
+            sendDisplayMessage(display, roomMember);
+        } else {
+            DisplayMessage displayMessage = new DisplayMessage(display);
+            imHelper.publishMessage(senderId, roomId, displayMessage, isIncludeSender);
+        }
     }
 
     public boolean isUserDisplay(Room room, String userId) {