Browse Source

网络教室消息

liujc 2 years ago
parent
commit
dcfecf8742
1 changed files with 44 additions and 4 deletions
  1. 44 4
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

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

@@ -822,13 +822,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 +848,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 {
@@ -1838,7 +1871,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) {