修复集群模式下国标级联跨平台请求无法发送目录订阅的BUG
This commit is contained in:
@@ -23,7 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
|
||||
/**
|
||||
* 级联平台管理
|
||||
@@ -157,15 +156,17 @@ public class PlatformController {
|
||||
@Parameter(name = "id", description = "上级平台ID")
|
||||
@DeleteMapping("/delete")
|
||||
@ResponseBody
|
||||
public DeferredResult<WVPResult<?>> deletePlatform(Integer id) {
|
||||
public WVPResult<?> deletePlatform(Integer id) {
|
||||
|
||||
if (log.isDebugEnabled()) {
|
||||
log.debug("删除上级平台API调用");
|
||||
}
|
||||
DeferredResult<WVPResult<?>> deferredResult = new DeferredResult<>();
|
||||
|
||||
platformService.delete(id, (object)-> deferredResult.setResult(WVPResult.success()));
|
||||
return deferredResult;
|
||||
boolean result = platformService.delete(id);
|
||||
if (result) {
|
||||
return WVPResult.success();
|
||||
}else {
|
||||
return WVPResult.fail(ErrorCode.ERROR100);
|
||||
}
|
||||
}
|
||||
|
||||
@Operation(summary = "查询上级平台是否存在", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.genersoft.iot.vmp.gb28181.controller.bean;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class ChannelListForRpcParam {
|
||||
private List<Integer> channelIds;
|
||||
private Integer platformId;
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.genersoft.iot.vmp.gb28181.service;
|
||||
|
||||
import com.genersoft.iot.vmp.common.CommonCallback;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Platform;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
|
||||
@@ -78,7 +77,7 @@ public interface IPlatformService {
|
||||
|
||||
List<Platform> queryEnablePlatformList(String serverId);
|
||||
|
||||
void delete(Integer platformId, CommonCallback<Object> callback);
|
||||
boolean delete(Integer platformId);
|
||||
|
||||
List<Platform> queryAll(String serverId);
|
||||
|
||||
|
||||
@@ -3,12 +3,14 @@ package com.genersoft.iot.vmp.gb28181.service.impl;
|
||||
import com.genersoft.iot.vmp.common.enums.ChannelDataType;
|
||||
import com.genersoft.iot.vmp.conf.UserSetting;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||
import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelListForRpcParam;
|
||||
import com.genersoft.iot.vmp.gb28181.dao.*;
|
||||
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
|
||||
import com.genersoft.iot.vmp.gb28181.event.channel.ChannelEvent;
|
||||
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IPlatformChannelService;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
|
||||
import com.genersoft.iot.vmp.service.redisMsg.IRedisRpcService;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -59,6 +61,9 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
@Autowired
|
||||
private UserSetting userSetting;
|
||||
|
||||
@Autowired
|
||||
private IRedisRpcService redisRpcService;
|
||||
|
||||
// 监听通道信息变化
|
||||
@EventListener
|
||||
public void onApplicationEvent(ChannelEvent event) {
|
||||
@@ -66,12 +71,12 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
log.info("[国标级联-处理通道变化事件] 通道数量为空");
|
||||
return;
|
||||
}
|
||||
String deviceIds = event.getChannels().stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = event.getChannels().stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[国标级联-处理通道变化事件] 类型: {}, 通道: {}", event.getMessageType(), deviceIds);
|
||||
// 获取通道所关联的平台
|
||||
List<Platform> allPlatform = platformMapper.queryByServerId(userSetting.getServerId());
|
||||
if (allPlatform.isEmpty()) {
|
||||
log.info("[国标级联-处理通道变化事件] 没有关联的平台");
|
||||
log.info("[国标级联-处理通道变化事件] 没有当前服务负责的平台");
|
||||
return;
|
||||
}
|
||||
// 获取所用订阅
|
||||
@@ -157,7 +162,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
|
||||
@EventListener
|
||||
public void onApplicationEvent(CatalogEvent event) {
|
||||
String deviceIds = event.getChannels().stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = event.getChannels().stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[Catalog事件: {}] 通道: {}", event.getType(), deviceIds);
|
||||
Platform platform = event.getPlatform();
|
||||
if (platform == null || platform.getServerGBId() == null) {
|
||||
@@ -377,8 +382,20 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
@Transactional
|
||||
public int addChannelList(Integer platformId, List<CommonGBChannel> channelList) {
|
||||
Platform platform = platformMapper.query(platformId);
|
||||
if (platform == null) {
|
||||
return 0;
|
||||
Assert.notNull(platform, "平台不存在");
|
||||
String channelDeviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
|
||||
log.info("[共享通道] 平台:{}, 通道:{}", platform.getServerGBId(), channelDeviceIds);
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
|
||||
List<Integer> channelIdList = channelList.stream().map(CommonGBChannel::getGbId).toList();
|
||||
int result = redisRpcService.addPlatformChannelList(platform.getServerId(), new ChannelListForRpcParam(channelIdList, platformId));
|
||||
if (result > 0) {
|
||||
log.info("[跨平台-共享通道] 成功, 平台:{}, 通道:{}", platform.getServerGBId(), channelDeviceIds);
|
||||
}else {
|
||||
log.info("[跨平台-共享通道] 失败, 平台:{}, 通道:{}", platform.getServerGBId(), channelDeviceIds);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
int result = platformChannelMapper.addChannels(platformId, channelList);
|
||||
if (result > 0) {
|
||||
@@ -422,7 +439,17 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
if (platform == null) {
|
||||
return 0;
|
||||
}
|
||||
log.info("[取消共享通道] 平台:{}, 通道:全部", platform.getServerGBId());
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
|
||||
int result = redisRpcService.removeAllPlatformChannel(platform.getServerId(), platformId);
|
||||
if (result > 0) {
|
||||
log.info("[跨平台-取消共享通道] 成功, 平台:{}, 通道:全部", platform.getServerGBId());
|
||||
}else {
|
||||
log.info("[跨平台-取消共享通道] 失败, 平台:{}, 通道:全部", platform.getServerGBId());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
List<CommonGBChannel> channelListShare = platformChannelMapper.queryShare(platformId, null);
|
||||
Assert.notEmpty(channelListShare, "未共享任何通道");
|
||||
int result = platformChannelMapper.removeChannelsWithPlatform(platformId, channelListShare);
|
||||
@@ -476,11 +503,22 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
log.info("[移除关联通道] 平台{}未查询到", platformId);
|
||||
return 0;
|
||||
}
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
log.info("[移除关联通道] 上级平台: {}, 通道: {}", platform.getServerGBId(), deviceIds);
|
||||
String channelDeviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[取消共享通道] 平台:{}, 通道: {}", platform.getServerGBId(), channelDeviceIds);
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
List<Integer> channelIds = channelList.stream().map(CommonGBChannel::getGbId).toList();
|
||||
int result = redisRpcService.removePlatformChannelList(platform.getServerId(), new ChannelListForRpcParam(channelIds, platformId));
|
||||
if (result > 0) {
|
||||
log.info("[跨平台-取消共享通道] 成功, 平台:{}, 通道: {}", platform.getServerGBId(), channelDeviceIds);
|
||||
}else {
|
||||
log.info("[跨平台-取消共享通道] 失败, 平台:{}, 通道: {}", platform.getServerGBId(), channelDeviceIds);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
int result = platformChannelMapper.removeChannelsWithPlatform(platformId, channelList);
|
||||
if (result <= 0) {
|
||||
log.info("[移除关联通道] 平台{}未关联通道: {}", platformId, deviceIds);
|
||||
log.info("[取消共享通道] 平台{}未关联通道: {}", platformId, deviceIds);
|
||||
return 0;
|
||||
}
|
||||
// 查询通道相关的分组信息
|
||||
@@ -505,7 +543,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
// 发送catalog
|
||||
eventPublisher.catalogEventPublish(platform, channelList, CatalogEvent.DEL);
|
||||
} catch (Exception e) {
|
||||
log.warn("[移除关联通道] 发送失败,数量:{}", channelList.size(), e);
|
||||
log.warn("[取消共享通道] 发送失败,数量:{}", channelList.size(), e);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -590,6 +628,16 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
public void pushChannel(Integer platformId) {
|
||||
Platform platform = platformMapper.query(platformId);
|
||||
Assert.notNull(platform, "平台不存在");
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
boolean result = redisRpcService.pushPlatformChannel(platform.getServerId(), platformId);
|
||||
if (result) {
|
||||
log.info("[跨平台-主动推送通道] 成功, 平台:{}", platform.getServerGBId());
|
||||
}else {
|
||||
log.info("[跨平台-主动推送通道] 失败, 平台:{}", platform.getServerGBId());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
List<CommonGBChannel> channelList = queryByPlatform(platform);
|
||||
if (channelList.isEmpty()){
|
||||
log.info("[推送通道] 平台:{} 未查询到通道信息", platform.getServerGBId());
|
||||
@@ -607,15 +655,28 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
|
||||
@Override
|
||||
public void updateCustomChannel(PlatformChannel channel) {
|
||||
platformChannelMapper.updateCustomChannel(channel);
|
||||
Platform platform = platformMapper.query(channel.getPlatformId());
|
||||
Assert.notNull(platform, "平台不存在");
|
||||
log.info("[国标级联-自定义共享通道] 平台:{}, 通道:{}", platform.getServerGBId(), channel);
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
boolean result = redisRpcService.updateCustomPlatformChannel(platform.getServerId(), channel);
|
||||
if (result) {
|
||||
log.info("[国标级联-自定义共享通道] 成功, 平台:{}, 通道:{}", platform.getServerGBId(), channel);
|
||||
}else {
|
||||
log.info("[国标级联-自定义共享通道] 失败, 平台:{}, 通道:{}", platform.getServerGBId(), channel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
platformChannelMapper.updateCustomChannel(channel);
|
||||
|
||||
CommonGBChannel commonGBChannel = platformChannelMapper.queryShareChannel(channel.getPlatformId(), channel.getGbId());
|
||||
// 发送消息
|
||||
try {
|
||||
// 发送catalog
|
||||
eventPublisher.catalogEventPublish(platform, commonGBChannel, CatalogEvent.UPDATE);
|
||||
} catch (Exception e) {
|
||||
log.warn("[自定义通道信息] 发送失败, 平台ID: {}, 通道: {}({})", channel.getPlatformId(),
|
||||
log.warn("[国标级联-自定义共享通道] 发送失败, 平台ID: {}, 通道: {}({})", channel.getPlatformId(),
|
||||
channel.getGbName(), channel.getId(), e);
|
||||
}
|
||||
}
|
||||
@@ -631,7 +692,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
// 获取关联这些通道的平台
|
||||
List<Platform> platformList = platformChannelMapper.queryPlatFormListByChannelList(channelIds);
|
||||
if (platformList.isEmpty()) {
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[获取关联这些通道的平台] 未查询到通道关联的平台, 通道如下 {}", deviceIds);
|
||||
return;
|
||||
}
|
||||
@@ -671,7 +732,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
// 获取关联这些通道的平台
|
||||
List<Platform> platformList = platformChannelMapper.queryPlatFormListByChannelList(channelIds);
|
||||
if (platformList.isEmpty()) {
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[获取关联这些通道的平台] 未查询到通道关联的平台, 通道如下 {}", deviceIds);
|
||||
return;
|
||||
}
|
||||
@@ -710,7 +771,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
});
|
||||
List<Platform> platformList = platformChannelMapper.queryPlatFormListByChannelList(channelIds);
|
||||
if (platformList.isEmpty()) {
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[获取关联这些通道的平台] 未查询到通道关联的平台, 通道如下 {}", deviceIds);
|
||||
return;
|
||||
}
|
||||
@@ -743,7 +804,7 @@ public class PlatformChannelServiceImpl implements IPlatformChannelService {
|
||||
});
|
||||
List<Platform> platformList = platformChannelMapper.queryPlatFormListByChannelList(channelIds);
|
||||
if (platformList.isEmpty()) {
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining());
|
||||
String deviceIds = channelList.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[获取关联这些通道的平台] 未查询到通道关联的平台, 通道如下 {}", deviceIds);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.genersoft.iot.vmp.common.*;
|
||||
import com.genersoft.iot.vmp.conf.DynamicTask;
|
||||
import com.genersoft.iot.vmp.conf.SipConfig;
|
||||
import com.genersoft.iot.vmp.conf.UserSetting;
|
||||
import com.genersoft.iot.vmp.conf.exception.ControllerException;
|
||||
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||
import com.genersoft.iot.vmp.gb28181.dao.PlatformChannelMapper;
|
||||
@@ -31,6 +32,7 @@ import com.genersoft.iot.vmp.service.ISendRtpServerService;
|
||||
import com.genersoft.iot.vmp.service.bean.*;
|
||||
import com.genersoft.iot.vmp.service.redisMsg.IRedisRpcService;
|
||||
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import gov.nist.javax.sip.message.SIPResponse;
|
||||
@@ -130,7 +132,7 @@ public class PlatformServiceImpl implements IPlatformService, CommandLineRunner
|
||||
if (stopResult) {
|
||||
Platform platform = queryPlatformByServerGBId(sendRtpItem.getTargetId());
|
||||
|
||||
if (platform != null) {
|
||||
if (platform != null && userSetting.getServerId().equals(platform.getServerId())) {
|
||||
try {
|
||||
commanderForPlatform.streamByeCmd(platform, sendRtpItem, channel);
|
||||
} catch (InvalidArgumentException | ParseException | SipException e) {
|
||||
@@ -154,7 +156,9 @@ public class PlatformServiceImpl implements IPlatformService, CommandLineRunner
|
||||
statusTaskRunner.removeRegisterTask(taskInfo.getPlatformServerId());
|
||||
continue;
|
||||
}
|
||||
sendUnRegister(platform, taskInfo.getSipTransactionInfo());
|
||||
if (userSetting.getServerId().equals(platform.getServerId())) {
|
||||
sendUnRegister(platform, taskInfo.getSipTransactionInfo());
|
||||
}
|
||||
}
|
||||
// 启动时所有平台默认离线
|
||||
platformMapper.offlineAll(userSetting.getServerId());
|
||||
@@ -874,25 +878,38 @@ public class PlatformServiceImpl implements IPlatformService, CommandLineRunner
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void delete(Integer platformId, CommonCallback<Object> callback) {
|
||||
public boolean delete(Integer platformId) {
|
||||
Platform platform = platformMapper.query(platformId);
|
||||
Assert.notNull(platform, "平台不存在");
|
||||
if (statusTaskRunner.containsRegister(platform.getServerGBId())) {
|
||||
try {
|
||||
SipTransactionInfo transactionInfo = statusTaskRunner.getRegisterTransactionInfo(platform.getServerGBId());
|
||||
sendUnRegister(platform, transactionInfo);
|
||||
}catch (Exception ignored) {}
|
||||
log.info("[删除平台] {}/{} {}:{}", platform.getName(), platform.getServerGBId(), platform.getServerIp(), platform.getServerPort());
|
||||
if (!userSetting.getServerId().equals(platform.getServerId())) {
|
||||
boolean result = redisRpcService.deletePlatform(platform.getServerId(), platformId);
|
||||
if (result) {
|
||||
log.info("[删除平台] 跨平台删除成功 {}/{}", platform.getName(), platform.getServerGBId());
|
||||
}else {
|
||||
log.info("[删除平台] 跨平台删除失败 {}/{}", platform.getName(), platform.getServerGBId());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
platformMapper.delete(platform.getId());
|
||||
try {
|
||||
if (statusTaskRunner.containsRegister(platform.getServerGBId())) {
|
||||
try {
|
||||
SipTransactionInfo transactionInfo = statusTaskRunner.getRegisterTransactionInfo(platform.getServerGBId());
|
||||
sendUnRegister(platform, transactionInfo);
|
||||
}catch (Exception ignored) {}
|
||||
}
|
||||
platformMapper.delete(platform.getId());
|
||||
|
||||
statusTaskRunner.removeRegisterTask(platform.getServerGBId());
|
||||
statusTaskRunner.removeKeepAliveTask(platform.getServerGBId());
|
||||
statusTaskRunner.removeRegisterTask(platform.getServerGBId());
|
||||
statusTaskRunner.removeKeepAliveTask(platform.getServerGBId());
|
||||
|
||||
subscribeHolder.removeCatalogSubscribe(platform.getServerGBId());
|
||||
subscribeHolder.removeMobilePositionSubscribe(platform.getServerGBId());
|
||||
if (callback != null) {
|
||||
callback.run(true);
|
||||
subscribeHolder.removeCatalogSubscribe(platform.getServerGBId());
|
||||
subscribeHolder.removeMobilePositionSubscribe(platform.getServerGBId());
|
||||
}catch (Exception e) {
|
||||
throw new ControllerException(ErrorCode.ERROR100.getCode(), e.getMessage());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -44,6 +44,7 @@ import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
@@ -434,7 +435,8 @@ public class SIPCommanderForPlatform implements ISIPCommanderForPlatform {
|
||||
Integer finalIndex = index;
|
||||
String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channels,
|
||||
deviceChannels.size(), type, subscribeInfo);
|
||||
log.info("[发送NOTIFY通知]类型: {},发送数量: {}", type, channels.size());
|
||||
String channelDeviceIds = channels.stream().map(CommonGBChannel::getGbDeviceId).collect(Collectors.joining(","));
|
||||
log.info("[发送NOTIFY通知]类型: {},通道: {}", type, channelDeviceIds);
|
||||
sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
|
||||
log.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
|
||||
log.error(catalogXmlContent);
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.service.redisMsg;
|
||||
import com.genersoft.iot.vmp.common.CommonCallback;
|
||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||
import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelListForRpcParam;
|
||||
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
|
||||
|
||||
@@ -25,6 +26,7 @@ public interface IRedisRpcService {
|
||||
void removeCallback(long key);
|
||||
|
||||
long onStreamOnlineEvent(String app, String stream, CommonCallback<StreamInfo> callback);
|
||||
|
||||
void unPushStreamOnlineEvent(String app, String stream);
|
||||
|
||||
void subscribeCatalog(int id, int cycle);
|
||||
@@ -33,6 +35,18 @@ public interface IRedisRpcService {
|
||||
|
||||
boolean updatePlatform(String serverId, Platform platform);
|
||||
|
||||
boolean deletePlatform(String serverId, Integer platformId);
|
||||
|
||||
int addPlatformChannelList(String serverGBId, ChannelListForRpcParam channelListForRpcParam);
|
||||
|
||||
int removeAllPlatformChannel(String serverId, Integer platformId);
|
||||
|
||||
int removePlatformChannelList(String serverId, ChannelListForRpcParam channelListForRpcParam);
|
||||
|
||||
boolean updateCustomPlatformChannel(String serverId, PlatformChannel channel);
|
||||
|
||||
boolean pushPlatformChannel(String serverId, Integer platformId);
|
||||
|
||||
void catalogEventPublish(String serverId, CatalogEvent catalogEvent);
|
||||
|
||||
WVPResult<SyncStatus> devicesSync(String serverId, String deviceId);
|
||||
|
||||
@@ -8,6 +8,8 @@ import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcRequest;
|
||||
import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcResponse;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.Platform;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.PlatformChannel;
|
||||
import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelListForRpcParam;
|
||||
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IPlatformChannelService;
|
||||
import com.genersoft.iot.vmp.gb28181.service.IPlatformService;
|
||||
@@ -55,7 +57,7 @@ public class RedisRpcPlatformController extends RpcController {
|
||||
* 更新
|
||||
*/
|
||||
@RedisRpcMapping("update")
|
||||
public RedisRpcResponse play(RedisRpcRequest request) {
|
||||
public RedisRpcResponse update(RedisRpcRequest request) {
|
||||
Platform platform = JSONObject.parseObject(request.getParam().toString(), Platform.class);
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
boolean update = platformService.update(platform);
|
||||
@@ -64,6 +66,114 @@ public class RedisRpcPlatformController extends RpcController {
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@RedisRpcMapping("delete")
|
||||
public RedisRpcResponse delete(RedisRpcRequest request) {
|
||||
Integer platformId = Integer.parseInt(request.getParam().toString());
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
boolean result = platformService.delete(platformId);
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody(Boolean.toString(result));
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("false");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
/**
|
||||
* 主动推送通道
|
||||
*/
|
||||
@RedisRpcMapping("pushChannel")
|
||||
public RedisRpcResponse pushChannel(RedisRpcRequest request) {
|
||||
Integer platformId = Integer.parseInt(request.getParam().toString());
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
platformChannelService.pushChannel(platformId);
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("true");
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("false");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 共享通道
|
||||
*/
|
||||
@RedisRpcMapping("addChannelList")
|
||||
public RedisRpcResponse addChannelList(RedisRpcRequest request) {
|
||||
ChannelListForRpcParam param = JSONObject.parseObject(request.getParam().toString(), ChannelListForRpcParam.class);
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
int result = platformChannelService.addChannels(param.getPlatformId(), param.getChannelIds());
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody(result + "");
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("0");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除全部共享通道
|
||||
*/
|
||||
@RedisRpcMapping("removeAllChannel")
|
||||
public RedisRpcResponse removeAllChannel(RedisRpcRequest request) {
|
||||
Integer platformId = Integer.parseInt(request.getParam().toString());
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
int result = platformChannelService.removeAllChannel(platformId);
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody(result + "");
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("0");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消共享通道
|
||||
*/
|
||||
@RedisRpcMapping("removeChannelList")
|
||||
public RedisRpcResponse removeChannelList(RedisRpcRequest request) {
|
||||
ChannelListForRpcParam param = JSONObject.parseObject(request.getParam().toString(), ChannelListForRpcParam.class);
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
int result = platformChannelService.removeChannels(param.getPlatformId(), param.getChannelIds());
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody(result + "");
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("0");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 自定义通道
|
||||
*/
|
||||
@RedisRpcMapping("updateCustomChannel")
|
||||
public RedisRpcResponse updateCustomChannel(RedisRpcRequest request) {
|
||||
PlatformChannel param = JSONObject.parseObject(request.getParam().toString(), PlatformChannel.class);
|
||||
RedisRpcResponse response = request.getResponse();
|
||||
try {
|
||||
platformChannelService.updateCustomChannel(param);
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("true");
|
||||
}catch (Exception e) {
|
||||
response.setStatusCode(ErrorCode.SUCCESS.getCode());
|
||||
response.setBody("false");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* 目录更新推送
|
||||
*/
|
||||
|
||||
@@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.conf.redis.RedisRpcConfig;
|
||||
import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcRequest;
|
||||
import com.genersoft.iot.vmp.conf.redis.bean.RedisRpcResponse;
|
||||
import com.genersoft.iot.vmp.gb28181.bean.*;
|
||||
import com.genersoft.iot.vmp.gb28181.controller.bean.ChannelListForRpcParam;
|
||||
import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent;
|
||||
import com.genersoft.iot.vmp.gb28181.session.SSRCFactory;
|
||||
import com.genersoft.iot.vmp.media.event.hook.Hook;
|
||||
@@ -238,6 +239,72 @@ public class RedisRpcServiceImpl implements IRedisRpcService {
|
||||
return Boolean.parseBoolean(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deletePlatform(String serverId, Integer platformId) {
|
||||
RedisRpcRequest request = buildRequest("platform/delete", platformId);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return false;
|
||||
}
|
||||
return Boolean.parseBoolean(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int addPlatformChannelList(String serverId, ChannelListForRpcParam channelListForRpcParam) {
|
||||
RedisRpcRequest request = buildRequest("platform/addChannelList", channelListForRpcParam);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return 0;
|
||||
}
|
||||
return Integer.parseInt(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int removeAllPlatformChannel(String serverId, Integer platformId) {
|
||||
RedisRpcRequest request = buildRequest("platform/removeAllChannel", platformId);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return 0;
|
||||
}
|
||||
return Integer.parseInt(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int removePlatformChannelList(String serverId, ChannelListForRpcParam channelListForRpcParam) {
|
||||
RedisRpcRequest request = buildRequest("platform/removeChannelList", channelListForRpcParam);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return 0;
|
||||
}
|
||||
return Integer.parseInt(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean updateCustomPlatformChannel(String serverId, PlatformChannel channel) {
|
||||
RedisRpcRequest request = buildRequest("platform/updateCustomChannel", channel);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return false;
|
||||
}
|
||||
return Boolean.parseBoolean(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean pushPlatformChannel(String serverId, Integer platformId) {
|
||||
RedisRpcRequest request = buildRequest("platform/pushChannel", platformId);
|
||||
request.setToId(serverId);
|
||||
RedisRpcResponse response = redisRpcConfig.request(request, 20, TimeUnit.SECONDS);
|
||||
if(response == null) {
|
||||
return false;
|
||||
}
|
||||
return Boolean.parseBoolean(response.getBody().toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void catalogEventPublish(String serverId, CatalogEvent event) {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
|
||||
Reference in New Issue
Block a user