|
@@ -1,5 +1,6 @@
|
|
|
package org.jetlinks.community.media.service;
|
|
package org.jetlinks.community.media.service;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollectionUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
|
|
import org.hswebframework.web.crud.service.GenericReactiveCrudService;
|
|
|
import org.jetlinks.community.gateway.annotation.Subscribe;
|
|
import org.jetlinks.community.gateway.annotation.Subscribe;
|
|
@@ -49,6 +50,7 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
private final LocalMediaDeviceChannelService deviceChannelService;
|
|
private final LocalMediaDeviceChannelService deviceChannelService;
|
|
|
private final String serverId;
|
|
private final String serverId;
|
|
|
private final RedisUtil redisUtil;
|
|
private final RedisUtil redisUtil;
|
|
|
|
|
+ private final ClusterManager clusterManager;
|
|
|
public LocalMediaDeviceService(DecodedClientMessageHandler messageHandler,
|
|
public LocalMediaDeviceService(DecodedClientMessageHandler messageHandler,
|
|
|
RedisCacheStorageImpl redisCacheStorage,
|
|
RedisCacheStorageImpl redisCacheStorage,
|
|
|
EventBus eventBus, DeviceRegistry registry,
|
|
EventBus eventBus, DeviceRegistry registry,
|
|
@@ -67,6 +69,7 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
this.sessionManager = sessionManager;
|
|
this.sessionManager = sessionManager;
|
|
|
this.deviceChannelService=deviceChannelService;
|
|
this.deviceChannelService=deviceChannelService;
|
|
|
this.redisUtil=redisUtil;
|
|
this.redisUtil=redisUtil;
|
|
|
|
|
+ this.clusterManager=clusterManager;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Subscribe("/media/device/*/*/register")
|
|
@Subscribe("/media/device/*/*/register")
|
|
@@ -198,6 +201,26 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void run(String... args) {
|
|
public void run(String... args) {
|
|
|
|
|
+ //监听其他节点信息
|
|
|
|
|
+ clusterManager.getHaManager().subscribeServerOffline()
|
|
|
|
|
+ .flatMap(node->{
|
|
|
|
|
+ Set<Object> members = redisUtil.members("session_" + node.getId());
|
|
|
|
|
+ redisUtil.del("session_"+ node.getId());
|
|
|
|
|
+ return Mono.just(members);
|
|
|
|
|
+ })
|
|
|
|
|
+ .flatMap(ids->{
|
|
|
|
|
+ if(CollectionUtil.isNotEmpty(ids)){
|
|
|
|
|
+ this.createUpdate()
|
|
|
|
|
+ .where(MediaDevice::getState,DeviceState.online)
|
|
|
|
|
+ .in(MediaDevice::getId,ids)
|
|
|
|
|
+ .set(MediaDevice::getState,DeviceState.offline)
|
|
|
|
|
+ .execute();
|
|
|
|
|
+ }
|
|
|
|
|
+ return Mono.empty();
|
|
|
|
|
+ })
|
|
|
|
|
+ .subscribe();
|
|
|
|
|
+
|
|
|
|
|
+ //将本节点信息下线
|
|
|
Set<Object> deviceIds = redisUtil.members("session_" + serverId);
|
|
Set<Object> deviceIds = redisUtil.members("session_" + serverId);
|
|
|
this.createUpdate()
|
|
this.createUpdate()
|
|
|
.where(MediaDevice::getState,DeviceState.online)
|
|
.where(MediaDevice::getState,DeviceState.online)
|