|
|
@@ -9,6 +9,7 @@ import org.jetlinks.community.gateway.monitor.DeviceGatewayMonitor;
|
|
|
import org.jetlinks.community.gateway.monitor.GatewayMonitors;
|
|
|
import org.jetlinks.community.media.entity.MediaDevice;
|
|
|
import org.jetlinks.community.media.bean.SipServerConfig;
|
|
|
+import org.jetlinks.community.media.entity.MediaDeviceChannel;
|
|
|
import org.jetlinks.community.media.enums.DeviceState;
|
|
|
import org.jetlinks.community.media.session.SipSession;
|
|
|
import org.jetlinks.community.media.sip.SipServerHelper;
|
|
|
@@ -20,6 +21,7 @@ import org.jetlinks.core.event.EventBus;
|
|
|
import org.jetlinks.core.message.DeviceOfflineMessage;
|
|
|
import org.jetlinks.core.message.DeviceOnlineMessage;
|
|
|
import org.jetlinks.core.message.DeviceRegisterMessage;
|
|
|
+import org.jetlinks.core.message.DeviceUnRegisterMessage;
|
|
|
import org.jetlinks.core.server.session.DeviceSession;
|
|
|
import org.jetlinks.core.server.session.DeviceSessionManager;
|
|
|
import org.jetlinks.core.utils.IdUtils;
|
|
|
@@ -54,6 +56,7 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
private final DeviceGatewayMonitor gatewayMonitor;
|
|
|
private final DecodedClientMessageHandler connector;
|
|
|
private final DeviceSessionManager sessionManager;
|
|
|
+ private final LocalMediaDeviceChannelService deviceChannelService;
|
|
|
|
|
|
public LocalMediaDeviceService(DecodedClientMessageHandler messageHandler,
|
|
|
RedisCacheStorageImpl redisCacheStorage,
|
|
|
@@ -61,7 +64,8 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
SipCommander cmder,
|
|
|
DecodedClientMessageHandler connector,
|
|
|
DeviceSessionManager sessionManager,
|
|
|
- SipServerHelper sipServerHelper) {
|
|
|
+ SipServerHelper sipServerHelper,
|
|
|
+ LocalMediaDeviceChannelService deviceChannelService) {
|
|
|
this.messageHandler = messageHandler;
|
|
|
this.redisCacheStorage = redisCacheStorage;
|
|
|
this.eventBus = eventBus;
|
|
|
@@ -71,6 +75,7 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
this.connector = connector;
|
|
|
this.sessionManager = sessionManager;
|
|
|
this.sipServerHelper = sipServerHelper;
|
|
|
+ this.deviceChannelService=deviceChannelService;
|
|
|
}
|
|
|
|
|
|
@Subscribe("/media/device/*/*/register")
|
|
|
@@ -89,8 +94,7 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
// SipSession sipSession = new SipSession(mediaDevice.getId(), operator, connector, 10L);
|
|
|
sipSession.onClose(()->{
|
|
|
//设备下线
|
|
|
- unRegister(mediaDevice);
|
|
|
- sessionManager.unregister(mediaDevice.getId());
|
|
|
+ deviceOffline(mediaDevice);
|
|
|
});
|
|
|
sessionManager.register(sipSession);
|
|
|
}
|
|
|
@@ -120,6 +124,31 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
.subscribe();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 设备下线
|
|
|
+ * @param mediaDevice 设备信息
|
|
|
+ */
|
|
|
+ private void deviceOffline(MediaDevice mediaDevice){
|
|
|
+ //取消注册媒体设备
|
|
|
+ redisCacheStorage.removeDevice(mediaDevice.getId());
|
|
|
+ this.createUpdate()
|
|
|
+ .where(MediaDevice::getId,mediaDevice.getId())
|
|
|
+ .set(MediaDevice::getState,DeviceState.offline)
|
|
|
+ .execute()
|
|
|
+ .flatMap(ignore->
|
|
|
+ //通用设备下线
|
|
|
+ registry.getDevice(mediaDevice.getId())
|
|
|
+ .flatMap(operator -> {
|
|
|
+ DeviceOfflineMessage message = new DeviceOfflineMessage();
|
|
|
+ message.setTimestamp(System.currentTimeMillis());
|
|
|
+ message.setDeviceId(mediaDevice.getId());
|
|
|
+ message.setMessageId(IdUtils.newUUID());
|
|
|
+ return messageHandler.handleMessage(operator,message);
|
|
|
+ })
|
|
|
+ )
|
|
|
+ .subscribe();
|
|
|
+ }
|
|
|
+
|
|
|
@Subscribe("/media/device/*/*/unregister")
|
|
|
public void unRegister(MediaDevice mediaDevice){
|
|
|
//取消注册媒体设备
|
|
|
@@ -128,21 +157,19 @@ public class LocalMediaDeviceService extends GenericReactiveCrudService<MediaDev
|
|
|
session.close();
|
|
|
}
|
|
|
redisCacheStorage.removeDevice(mediaDevice.getId());
|
|
|
- this.createUpdate()
|
|
|
- .where(MediaDevice::getId,mediaDevice.getId())
|
|
|
- .set(MediaDevice::getState,DeviceState.offline)
|
|
|
- .execute()
|
|
|
+ this.deleteById(mediaDevice.getId())
|
|
|
.flatMap(ignore->
|
|
|
//通用设备下线
|
|
|
registry.getDevice(mediaDevice.getId())
|
|
|
.flatMap(operator -> {
|
|
|
- DeviceOfflineMessage message = new DeviceOfflineMessage();
|
|
|
+ DeviceUnRegisterMessage message = new DeviceUnRegisterMessage();
|
|
|
message.setTimestamp(System.currentTimeMillis());
|
|
|
- message.setDeviceId(mediaDevice.getIp());
|
|
|
+ message.setDeviceId(mediaDevice.getId());
|
|
|
message.setMessageId(IdUtils.newUUID());
|
|
|
return messageHandler.handleMessage(operator,message);
|
|
|
})
|
|
|
)
|
|
|
+ .mergeWith(deviceChannelService.createDelete().where(MediaDeviceChannel::getDeviceId,mediaDevice.getId()).execute().then(Mono.empty()))
|
|
|
.subscribe();
|
|
|
}
|
|
|
|