소스 검색

增加销毁房间心跳逻辑判断

hgw 3 년 전
부모
커밋
1123a84ac0
1개의 변경된 파일17개의 추가작업 그리고 0개의 파일을 삭제
  1. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -101,6 +101,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public static final String LIVE_USER_ROOM = "IM:LIVE_ROOM_USER:" + USER_ID;
     //记录人员最后变更的状态消息时间
     public static final String LIVE_USER_STATE_TIME = "IM:LIVE_USER_STATE_TIME:" + USER_ID;
+    //当前房间主讲人心跳
+    public static final String LIVE_ROOM_SPEAKER_HEART_BEAT = "IM:LIVE_ROOM_SPEAKER_HEART_BEAT:" + ROOM_UID;
     //房间点赞数
     public static final String LIVE_ROOM_LIKE = "IM:LIVE_ROOM_LIKE:" + ROOM_UID;
     //计算人员观看时长锁
@@ -438,6 +440,18 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString()));
         if (speakerCache.isExists()) {
             RoomSpeakerInfo speakerInfo = speakerCache.get();
+            //校验房间心跳是否过期没续租
+            RBucket<Date> lastRoomHeartbeatCache = redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, room.getRoomUid()));
+            if(lastRoomHeartbeatCache.isExists()){
+                //获取最后一次房间心跳时间
+                Date lastDate = lastRoomHeartbeatCache.get();
+                //房间心跳过期时间 = 将房间心跳时间+过期分钟
+                Date lastRoomDateExpired = DateUtil.addMinutes(lastDate, expiredMinute);
+                //当前时间 小于 房间心跳过期时间 则不销毁
+                if (now.getTime() <= lastRoomDateExpired.getTime()) {
+                    return;
+                }
+            }
             //1.主播没有进入房间,则直接销毁房间
             if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
                 log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
@@ -613,6 +627,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Override
     public void syncLike(String roomUid, Integer likeNum) {
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).set(likeNum);
+        //增加房间心跳
+        redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid))
+                .set(new Date());
     }
 
     /**