Browse Source

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

hgw 3 years ago
parent
commit
1123a84ac0

+ 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_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_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;
     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()));
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, room.getSpeakerId().toString()));
         if (speakerCache.isExists()) {
         if (speakerCache.isExists()) {
             RoomSpeakerInfo speakerInfo = speakerCache.get();
             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.主播没有进入房间,则直接销毁房间
             //1.主播没有进入房间,则直接销毁房间
             if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
             if (Objects.isNull(speakerInfo.getJoinRoomTime())) {
                 log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
                 log.info("roomDestroy not joinRoom >>>> cache : {}", JSONObject.toJSONString(test(room.getRoomUid())));
@@ -613,6 +627,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     @Override
     @Override
     public void syncLike(String roomUid, Integer likeNum) {
     public void syncLike(String roomUid, Integer likeNum) {
         redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).set(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());
     }
     }
 
 
     /**
     /**