Ver código fonte

Merge branch 'feature/0414-trtc' into master_saas

Eric 2 anos atrás
pai
commit
3c5bb8c2da

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

@@ -296,9 +296,17 @@ public class RoomServiceImpl implements RoomService {
             Boolean exists = redisTemplate.opsForValue().setIfAbsent(joinImGroupKey, roomId, 1L, TimeUnit.DAYS);
 
             if (Optional.ofNullable(exists).orElse(false)) {
-                // 创建群组
-                log.info("createImGroup: roomId = {}, userId = {}", roomId, teacherInfo.getId());
-                pluginService.chatRoomCreate(roomId, courseSchedule.getName(), teacherInfo.getAvatar());
+
+                // 生成群组,更新服务提供方
+                if (StringUtils.isBlank(courseSchedule.getServiceProvider())) {
+
+                    // 创建群组
+                    log.info("createImGroup: roomId = {}, userId = {}", roomId, teacherInfo.getId());
+                    pluginService.chatRoomCreate(roomId, courseSchedule.getName(), teacherInfo.getId().toString());
+
+                    // 更新网络课服务提供方
+                    courseScheduleDao.updateServiceProvider(courseSchedule.getId(), rtcServiceProvider);
+                }
 
                 // 群组老师信息
                 List<ImGroupMemberWrapper.ImGroupMember> groupMembers = Lists.newArrayList(ImGroupMemberWrapper.ImGroupMember
@@ -319,16 +327,9 @@ public class RoomServiceImpl implements RoomService {
                     }
                 }
 
-                // 生成群组,更新服务提供方
-                if (StringUtils.isBlank(courseSchedule.getServiceProvider())) {
-
-                    // 加入群组成员
-                    log.info("joinImGroup: roomId = {}, userIds = {}", roomId, groupMembers);
-                    pluginService.chatRoomGroupJoin(roomId, courseSchedule.getName(), groupMembers);
-
-                    // 更新网络课服务提供方
-                    courseScheduleDao.updateServiceProvider(courseSchedule.getId(), rtcServiceProvider);
-                }
+                // 加入群组成员
+                log.info("joinImGroup: roomId = {}, serviceProvider={}, userIds = {}", roomId, courseSchedule.getServiceProvider(), groupMembers);
+                pluginService.chatRoomGroupJoin(roomId, courseSchedule.getName(), groupMembers);
 
             }
         }
@@ -822,13 +823,18 @@ public class RoomServiceImpl implements RoomService {
         if (roomMember == null) {
             return true;
         }
-
+        Room room = roomDao.findByRid(roomId);
+        Integer firstCourseId = Integer.parseInt(roomId.substring(1));
+        CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
         MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Kick, userId, roomMember.getRole());
         msg.setUserName(roomMember.getName());
 
-        imHelper.publishMessage(userId, roomId, msg, 1);
+        if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(courseSchedule.getServiceProvider())) {
 
-        Room room = roomDao.findByRid(roomId);
+            sendJoinLeaveMessage(roomMember, MemberChangedMessage.Action_Kick);
+        } else {
+            imHelper.publishMessage(userId, roomId, msg, 1);
+        }
         if (roomMember.getRole() == RoleTeacher.getValue() && isUserDisplay(room, userId)) {
             updateDisplay(roomId, userId, "", 1);
         }
@@ -843,6 +849,34 @@ public class RoomServiceImpl implements RoomService {
         return true;
     }
 
+    private void sendJoinLeaveMessage(RoomMember roomMember, int status) throws Exception {
+        // 获取RTC服务提供方
+        RTCRoomPluginService pluginService = rtcRoomPluginContext.getPluginService(TencentCloudRTCPlugin.PLUGIN_NAME);
+        // 腾讯云RTC服务
+        RTCRoomMessage.MessageContent.MessageContentBuilder action = RTCRoomMessage.MessageContent.builder()
+                .action(status)
+                .role(roomMember.getRole());
+        action.handUpOn(false)
+                .microphone(false)
+                .camera(false).sendUserInfo(RTCRoomMessage.MessageUser.builder()
+                        .sendUserId(roomMember.getUid())
+                        .sendUserName(roomMember.getName())
+                        .avatarUrl(roomMember.getHeadUrl())
+                        .build());
+
+
+        RTCRoomMessage roomMessage = RTCRoomMessage.builder()
+                .objectName(RTCRoomMessage.MEMBER_CHANGE_MESSAGE)
+                .content(action.build())
+                .toChatRoomId(roomMember.getRid())
+                .fromUserId(roomMember.getUid())
+                .isIncludeSender(1)
+                .isPersisted(1)
+                .build();
+
+        pluginService.sendChatRoomMessage(roomMessage);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean display(String roomId, int type, String uri, String targetUserId) throws Exception {
@@ -1238,7 +1272,7 @@ public class RoomServiceImpl implements RoomService {
             // 发送消息
             if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(pluginService.pluginName())) {
                 // 腾讯消息
-                pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.DEVICE_MESSAGE).content(messageContent));
+                pluginService.sendChatRoomMessage(message.objectName(RTCRoomMessage.CONTROL_DEVICE_NOTIFY_MESSAGE).content(messageContent));
             } else {
                 // 融云消息
                 imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
@@ -1838,7 +1872,14 @@ public class RoomServiceImpl implements RoomService {
                     roomMemberDao.deleteUserByRidAndUid(member.getRid(), member.getUid());
                     MemberChangedMessage msg = new MemberChangedMessage(MemberChangedMessage.Action_Leave, member.getUid(), userRole);
                     msg.setUserName(member.getName());
-                    imHelper.publishMessage(member.getUid(), member.getRid(), msg);
+                    Integer firstCourseId = Integer.parseInt(member.getRid().substring(1));
+                    CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
+
+                    if (TencentCloudRTCPlugin.PLUGIN_NAME.equals(courseSchedule.getServiceProvider())) {
+                        sendJoinLeaveMessage(member, MemberChangedMessage.Action_Leave);
+                    } else {
+                        imHelper.publishMessage(member.getUid(), member.getRid(), msg);
+                    }
                 }
                 userDao.deleteByUid(member.getUid());
             } catch (Exception e) {