|
@@ -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());
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1097,6 +1114,26 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
public Map<String, Object> test(String roomUid) {
|
|
|
//test
|
|
|
Map<String, Object> result = new HashMap<>();
|
|
|
+ //校验房间心跳是否过期没续租
|
|
|
+ RBucket<Date> lastRoomHeartbeatCache = redissonClient.getBucket(LIVE_ROOM_SPEAKER_HEART_BEAT.replace(ROOM_UID, roomUid));
|
|
|
+ if (lastRoomHeartbeatCache.isExists()) {
|
|
|
+ result.put("房间心跳", DateUtil.dateToString(lastRoomHeartbeatCache.get(), DateUtil.EXPANDED_DATE_TIME_FORMAT));
|
|
|
+ } else {
|
|
|
+ result.put("房间心跳", "房间心跳不存在");
|
|
|
+ }
|
|
|
+ String userId = "";
|
|
|
+ try {
|
|
|
+ String[] split = roomUid.split("-");
|
|
|
+ userId = split[1];
|
|
|
+ } catch (Exception ignored) {
|
|
|
+ }
|
|
|
+ //获取主讲人信息
|
|
|
+ RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId));
|
|
|
+ if (speakerCache.isExists()) {
|
|
|
+ result.put("主讲人信息", speakerCache.get());
|
|
|
+ } else {
|
|
|
+ result.put("主讲人信息", "主讲人信息不存在");
|
|
|
+ }
|
|
|
//点赞数
|
|
|
Object like = redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).get();
|
|
|
if (Objects.isNull(like)) {
|
|
@@ -1122,20 +1159,6 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
|
|
|
} else {
|
|
|
result.put("总人员数据", "没有人员数据");
|
|
|
}
|
|
|
- String userId = "";
|
|
|
- try {
|
|
|
- String[] split = roomUid.split("-");
|
|
|
- userId = split[1];
|
|
|
- } catch (Exception ignored) {
|
|
|
- }
|
|
|
-
|
|
|
- //获取主讲人信息
|
|
|
- RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId));
|
|
|
- if (speakerCache.isExists()) {
|
|
|
- result.put("主讲人信息", speakerCache.get());
|
|
|
- } else {
|
|
|
- result.put("主讲人信息", "主讲人信息不存在");
|
|
|
- }
|
|
|
result.put("总观看人数", totalLook);
|
|
|
result.put("实时观看数", look);
|
|
|
return result;
|