zouxuan 4 năm trước cách đây
mục cha
commit
0b8d956635

+ 59 - 43
edu-im/edu-im-server/src/main/java/com/keao/edu/im/service/Impl/RoomServiceImpl.java

@@ -98,15 +98,17 @@ public class RoomServiceImpl implements RoomService {
         }
     }
 
-    public void joinRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
+    public void joinRoomSuccess(RoomMember roomMember) throws Exception {
         StudentExamResultApiDto examResult = null;
-        log.info("joinRoomSuccess: roomId={}, isAudience={}, isDisableCamera={},isMusicMode={}", roomId);
+        String roomId = roomMember.getRid();
+        String userId = roomMember.getUid();
+        Long registrationId = roomMember.getExamRegistrationId();
+        log.info("joinRoomSuccess: roomId={}, userId={}", roomId,userId);
 
-        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
+        SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(roomMember.getUid()));
         String realName = sysUser.getRealName();
         if(registrationId != null){
             examResult = eduUserFeignService.getExamResult(registrationId);
-            roomId = examResult.getRoomId();
         }
 
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
@@ -125,7 +127,6 @@ public class RoomServiceImpl implements RoomService {
             saveRoom(roomId, roomId, curTime, null);
         }
         RoleEnum roleEnum;
-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
         if (roomMember == null) {
             if(sysUser.getId().equals(examRoom.getMainTeacherUserId())){
                 roleEnum = RoleEnum.MainTeacher;
@@ -293,14 +294,17 @@ public class RoomServiceImpl implements RoomService {
         roomMemberDao.save(roomMember);
     }
 
-    public void leaveRoomSuccess(Long registrationId,String roomId,String userId) throws Exception {
+    public void leaveRoomSuccess(RoomMember roomMember) throws Exception {
+        String roomId = roomMember.getRid();
+        String userId = roomMember.getUid();
+        Long registrationId = roomMember.getExamRegistrationId();
+        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
         if(registrationId != null){
             StudentExamResultApiDto examResult = eduUserFeignService.getExamResult(registrationId);
             roomId = examResult.getRoomId();
         }
 
         SysUser  user = sysUserFeignService.queryUserById(Integer.parseInt(userId));
-        log.info("leaveRoom: roomId={}, userId={}", roomId,userId);
 
         CheckUtils.checkArgument(userId != null, "userId must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
@@ -310,7 +314,6 @@ public class RoomServiceImpl implements RoomService {
             log.error("room : {} not exist ", roomId);
             return;
         }
-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
         if (roomMember == null) {
             log.error("{} not exist in room: {}", userId, roomId);
             return;
@@ -1220,13 +1223,7 @@ public class RoomServiceImpl implements RoomService {
     public boolean statusSync(ChannelStateNotify notify) throws Exception {
         String roomId = notify.getRoomId();
         String userId = notify.getUserId();
-
-        RoomMember roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
-        log.info("statusSync roomMember:{}",roomMember);
-
-        if(roomMember == null){
-            return false;
-        }
+        RoomMember roomMember = null;
         if(notify.getEvent() == 1){
             //同步房间信息
         }else if(notify.getEvent() == 2){
@@ -1237,47 +1234,66 @@ public class RoomServiceImpl implements RoomService {
             redisTemplate.delete("sessionId:" + roomId);
         }else if(notify.getEvent() == 11){
             //成员加入
-            log.info("成员加入 roomId: {}, userId: {}",roomId, userId);
 //            roomMemberDao.updateMsidByRidAndUid(roomId,userId,msidFlag);
-            joinRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId);
+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+            if(roomMember == null){
+                return false;
+            }
+            joinRoomSuccess(roomMember);
         }else if(notify.getEvent() == 12){
             //成员退出
-            log.info("成员退出 roomId: {}, userId: {}",roomId, userId);
 //            roomMemberDao.updateMsidByRidAndUid(roomId,userId,msidFlag);
-            leaveRoomSuccess(roomMember.getExamRegistrationId(),roomId,userId);
+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+            if(roomMember == null){
+                return false;
+            }
+            leaveRoomSuccess(roomMember);
         }else if(notify.getEvent() == 20){
-            log.info("资源变动 roomId: {}, userId: {}",roomId, userId);
-            boolean msidFlag = false;
-            Integer state = null;
-            List<Member> members = notify.getMembers();
-            if(members != null && members.size() != 0){
-                Object uris = JSONObject.parseObject(members.get(0).getData().toJSONString()).get("uris");
-                if(uris != null){
-                    List<UrisDto> jsonArray = JSONObject.parseArray(uris.toString(),UrisDto.class);
-                    for (UrisDto urisDto : jsonArray) {
-                        //视频流
-                        if(urisDto.getMediaType() == 1){
-                            state = urisDto.getState();
-                            if(state == 1){
-                                msidFlag = true;
-                            }
-                            break;
-                        }else {
-                            //音频流
+            roomMember = roomMemberDao.findByRidAndUid(roomId, userId);
+            if(roomMember == null){
+                return false;
+            }
+            resourceChange(roomMember,notify.getMembers());
+        }
+        return true;
+    }
+
+    private void resourceChange(RoomMember roomMember,List<Member> members){
+        String roomId = roomMember.getRid();
+        String userId = roomMember.getUid();
+        log.info("资源变动 roomId: {}, userId: {}",roomId, userId);
+        boolean msidFlag = false;
+        Integer state = null;
+        if(members != null && members.size() != 0){
+            Object uris = JSONObject.parseObject(members.get(0).getData().toJSONString()).get("uris");
+            if(uris != null){
+                List<UrisDto> jsonArray = JSONObject.parseArray(uris.toString(),UrisDto.class);
+                for (UrisDto urisDto : jsonArray) {
+                    //视频流
+                    if(urisDto.getMediaType() == 1){
+                        state = urisDto.getState();
+                        if(state == 1){
+                            msidFlag = true;
                         }
+                        break;
+                    }else {
+                        //音频流
                     }
                 }
             }
-            //同步录制资源
-            //资源发生变动
-            if(roomMember.isMsidFlag() != msidFlag){
-                roomMemberDao.updateMsidFlagByRidAndUid(roomId,userId,state);
-                if(roomMember.getExamRegistrationId() == null){
+        }
+        //同步录制资源
+        //资源发生变动
+        if(roomMember.isMsidFlag() != msidFlag){
+            roomMemberDao.updateMsidFlagByRidAndUid(roomId,userId,state);
+            if(roomMember.getExamRegistrationId() == null){
+                try {
                     imHelper.configRecord(roomId);
+                } catch (Exception e) {
+                    e.printStackTrace();
                 }
             }
         }
-        return true;
     }
 
     @Override