From ecaf8750dd9c537e581ae05c65be9a26db5e67a7 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 24 十一月 2020 16:41:00 +0800 Subject: [PATCH] 完成向上级联->注册 --- src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java | 21 ++ src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java | 45 +++++ src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java | 6 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 3 README.md | 3 src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java | 13 + src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 7 web_src/src/components/platformEdit.vue | 42 ++++ src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 2 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 72 +++++++++ src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java | 5 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 10 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 81 ++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 13 + src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java | 23 ++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java | 83 ++++++++++ 16 files changed, 416 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 583d34e..2cca7a5 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,8 @@ # 2.0 鏀寔鐗规�� - [ ] 鍥芥爣閫氶亾鍚戜笂绾ц仈 - [X] WEB娣诲姞涓婄骇骞冲彴 - - [ ] 娉ㄥ唽 + - [X] 娉ㄥ唽 + - [ ] 蹇冭烦淇濇椿 - [ ] 閫氶亾閫夋嫨 - [ ] 閫氶亾鎺ㄩ�� - [ ] 鐐规挱 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java index bfdc8f6..9b091e6 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -123,7 +123,7 @@ public void processResponse(ResponseEvent evt) { Response response = evt.getResponse(); int status = response.getStatusCode(); - if ((status >= 200) && (status < 300)) { // Success! + if (((status >= 200) && (status < 300)) || status == 401) { // Success! ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt); try { processor.process(evt, this, sipConfig); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java index ebf0430..3e0a184 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java @@ -1,5 +1,8 @@ package com.genersoft.iot.vmp.gb28181.event; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.event.platformNotRegister.PlatformNotRegisterEvent; +import com.genersoft.iot.vmp.vmanager.platform.PlatformController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; @@ -31,4 +34,14 @@ outEvent.setFrom(from); applicationEventPublisher.publishEvent(outEvent); } + + /** + * 骞冲彴鏈敞鍐屼簨浠� + * @param platformGbId + */ + public void platformNotRegisterEventPublish(String platformGbId){ + PlatformNotRegisterEvent platformNotRegisterEvent = new PlatformNotRegisterEvent(this); + platformNotRegisterEvent.setPlatformGbID(platformGbId); + applicationEventPublisher.publishEvent(platformNotRegisterEvent); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java new file mode 100644 index 0000000..9c238d7 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEvent.java @@ -0,0 +1,21 @@ +package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; + +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import org.springframework.context.ApplicationEvent; + +public class PlatformNotRegisterEvent extends ApplicationEvent { + + private String platformGbID; + + public PlatformNotRegisterEvent(Object source) { + super(source); + } + + public String getPlatformGbID() { + return platformGbID; + } + + public void setPlatformGbID(String platformGbID) { + this.platformGbID = platformGbID; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java new file mode 100644 index 0000000..564d382 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/platformNotRegister/PlatformNotRegisterEventLister.java @@ -0,0 +1,45 @@ +package com.genersoft.iot.vmp.gb28181.event.platformNotRegister; + +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.event.online.OnlineEvent; +import com.genersoft.iot.vmp.gb28181.event.online.OnlineEventListener; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.utils.redis.RedisUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +/** + * @Description: 骞冲彴鏈敞鍐屼簨浠�,鏉ユ簮鏈変簩: + * 1銆佸钩鍙版柊娣诲姞 + * 2銆佸钩鍙板績璺宠秴鏃� + * @author: panll + * @date: 2020骞�11鏈�24鏃� 10:00 + */ +@Component +public class PlatformNotRegisterEventLister implements ApplicationListener<PlatformNotRegisterEvent> { + + private final static Logger logger = LoggerFactory.getLogger(PlatformNotRegisterEventLister.class); + + @Autowired + private IVideoManagerStorager storager; + + @Autowired + private RedisUtil redis; + + @Override + public void onApplicationEvent(PlatformNotRegisterEvent event) { + + if (logger.isDebugEnabled()) { + logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); + } + ParentPlatform parentPlatform = storager.queryParentPlatById(event.getPlatformGbID()); + if (parentPlatform == null) { + logger.debug("骞冲彴鏈敞鍐屼簨浠惰Е鍙戯紝浣嗗钩鍙板凡缁忓垹闄�!!! 骞冲彴鍥芥爣ID锛�" + event.getPlatformGbID()); + return; + } + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java index 73fb474..3ee95f9 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java @@ -8,6 +8,7 @@ import javax.sip.message.Response; import com.alibaba.fastjson.JSON; +import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,10 +31,6 @@ import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.SubscribeRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; -import com.genersoft.iot.vmp.gb28181.transmit.response.impl.ByeResponseProcessor; -import com.genersoft.iot.vmp.gb28181.transmit.response.impl.CancelResponseProcessor; -import com.genersoft.iot.vmp.gb28181.transmit.response.impl.InviteResponseProcessor; -import com.genersoft.iot.vmp.gb28181.transmit.response.impl.OtherResponseProcessor; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.utils.SpringBeanFactory; import com.genersoft.iot.vmp.utils.redis.RedisUtil; @@ -80,6 +77,9 @@ @Autowired private CancelResponseProcessor cancelResponseProcessor; + + @Autowired + private RegisterResponseProcessor registerResponseProcessor; @Autowired private OtherResponseProcessor otherResponseProcessor; @@ -154,6 +154,8 @@ return byeResponseProcessor; } else if (Request.CANCEL.equals(method)) { return cancelResponseProcessor; + }else if (Request.REGISTER.equals(method)) { + return registerResponseProcessor; } else { return otherResponseProcessor; } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java index 923f211..32cc06e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java @@ -2,6 +2,7 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; /** * @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔� @@ -212,4 +213,6 @@ * @param device 瑙嗛璁惧 */ public boolean mobilePostitionQuery(Device device); + + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java new file mode 100644 index 0000000..9ec2b49 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java @@ -0,0 +1,13 @@ +package com.genersoft.iot.vmp.gb28181.transmit.cmd; + +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; + +public interface ISIPCommanderForPlatform { + + /** + * 鍚戜笂绾у钩鍙版敞鍐� + * @param parentPlatform + * @return + */ + boolean register(ParentPlatform parentPlatform, String callId, String realm, String nonce, String scheme); +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java index 2233ee0..fa3465d 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java @@ -11,7 +11,9 @@ import javax.sip.address.SipURI; import javax.sip.header.*; import javax.sip.message.Request; +import javax.validation.constraints.NotNull; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; @@ -19,6 +21,7 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Host; +import org.springframework.util.DigestUtils; /** * @Description:鎽勫儚澶村懡浠equest鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖� @@ -168,4 +171,73 @@ request.setContent(content, contentTypeHeader); return request; } + + + public Request createRegisterRequest(@NotNull ParentPlatform platform, String fromTag, String viaTag) throws ParseException, InvalidArgumentException, PeerUnavailableException { + Request request = null; + String sipAddress = sipConfig.getSipIp() + ":" + sipConfig.getSipPort(); + //璇锋眰琛� + SipURI requestLine = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(), + platform.getServerIP() + ":" + platform.getServerPort()); + //via + ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); + ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(platform.getServerIP(), platform.getServerPort(), platform.getTransport(), viaTag); + viaHeader.setRPort(); + viaHeaders.add(viaHeader); + //from + SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress); + Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI); + FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); + //to + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(platform.getDeviceGBId(),sipAddress); + Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI); + ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null); + + //callid + CallIdHeader callIdHeader = null; + if(platform.getTransport().equals("TCP")) { + callIdHeader = tcpSipProvider.getNewCallId(); + } + if(platform.getTransport().equals("UDP")) { + callIdHeader = udpSipProvider.getNewCallId(); + } + + //Forwards + MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70); + + //ceq + CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.REGISTER); + request = sipFactory.createMessageFactory().createRequest(requestLine, Request.REGISTER, callIdHeader, + cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards); + + Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory() + .createSipURI(platform.getDeviceGBId(), sipAddress)); + request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); + + return request; + } + + public Request createRegisterRequest(@NotNull ParentPlatform parentPlatform, String fromTag, String viaTag, + String callId, String realm, String nonce, String scheme) throws ParseException, PeerUnavailableException, InvalidArgumentException { + Request registerRequest = createRegisterRequest(parentPlatform, fromTag, viaTag); + + CallIdHeader callIdHeader = (CallIdHeader)registerRequest.getHeader(CallIdHeader.NAME); + callIdHeader.setCallId(callId); + + String uri = "sip:" + parentPlatform.getServerGBId() + + "@" + parentPlatform.getServerIP() + + ":" + parentPlatform.getServerPort(); + + String HA1 = DigestUtils.md5DigestAsHex((parentPlatform.getDeviceGBId() + ":" + realm + ":" + parentPlatform.getPassword()).getBytes()); + String HA2=DigestUtils.md5DigestAsHex((Request.REGISTER + ":" + uri).getBytes()); + String RESPONSE = DigestUtils.md5DigestAsHex((HA1 + ":" + nonce + ":" + HA2).getBytes()); + + String authorizationHeaderContent = scheme + " username=\"" + parentPlatform.getDeviceGBId() + "\", " + "realm=\"" + + realm + "\", uri=\"" + uri + "\", response=\"" + RESPONSE + "\", nonce=\"" + + nonce + "\""; + AuthorizationHeader authorizationHeader = sipFactory.createHeaderFactory().createAuthorizationHeader(authorizationHeaderContent); + registerRequest.addHeader(authorizationHeader); + + return registerRequest; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java new file mode 100644 index 0000000..baf6e5a --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java @@ -0,0 +1,81 @@ +package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl; + +import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider; +import com.genersoft.iot.vmp.media.zlm.ZLMUtils; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; + +import javax.sip.*; +import javax.sip.message.Request; +import java.text.ParseException; + +@Component +public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { + + @Autowired + private SipConfig sipConfig; + + @Autowired + private SIPRequestHeaderProvider headerProvider; + + @Autowired + private VideoStreamSessionManager streamSession; + + @Autowired + private IVideoManagerStorager storager; + + @Autowired + @Qualifier(value="tcpSipProvider") + private SipProvider tcpSipProvider; + + @Autowired + @Qualifier(value="udpSipProvider") + private SipProvider udpSipProvider; + + @Autowired + private ZLMUtils zlmUtils; + + @Value("${media.rtp.enable}") + private boolean rtpEnable; + + @Override + public boolean register(ParentPlatform parentPlatform, @Nullable String callId, @Nullable String realm, @Nullable String nonce, @Nullable String scheme ) { + try { + Request request = null; + if (realm == null || nonce == null) { + request = headerProvider.createRegisterRequest(parentPlatform, null, null); + }else { + request = headerProvider.createRegisterRequest(parentPlatform, null, null, callId, realm, nonce, scheme); + } + + transmitRequest(parentPlatform, request); + return true; + } catch (ParseException e) { + e.printStackTrace(); + } catch (InvalidArgumentException e) { + e.printStackTrace(); + } catch (PeerUnavailableException e) { + e.printStackTrace(); + } catch (SipException e) { + e.printStackTrace(); + } + return false; + } + + private void transmitRequest(ParentPlatform parentPlatform, Request request) throws SipException { + if("TCP".equals(parentPlatform.getTransport())) { + tcpSipProvider.sendRequest(request); + } else if("UDP".equals(parentPlatform.getTransport())) { + udpSipProvider.sendRequest(request); + } + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java new file mode 100644 index 0000000..9fb1312 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/RegisterResponseProcessor.java @@ -0,0 +1,83 @@ +package com.genersoft.iot.vmp.gb28181.transmit.response.impl; + +import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.gb28181.SipLayer; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; +import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import gov.nist.core.Host; +import gov.nist.javax.sip.address.AddressImpl; +import gov.nist.javax.sip.address.SipUri; +import gov.nist.javax.sip.header.To; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.sip.ResponseEvent; +import javax.sip.address.Address; +import javax.sip.address.URI; +import javax.sip.header.CallIdHeader; +import javax.sip.header.ToHeader; +import javax.sip.header.WWWAuthenticateHeader; +import javax.sip.message.Response; + +/** + * @Description:Register鍝嶅簲澶勭悊鍣� + * @author: swwheihei + * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:23 + */ +@Component +public class RegisterResponseProcessor implements ISIPResponseProcessor { + + private Logger logger = LoggerFactory.getLogger(RegisterRequestProcessor.class); + + @Autowired + private ISIPCommanderForPlatform sipCommanderForPlatform; + + @Autowired + private IVideoManagerStorager storager; + + /** + * 澶勭悊Register鍝嶅簲 + * + * @param evt + * @param layer + * @param config + */ + @Override + public void process(ResponseEvent evt, SipLayer layer, SipConfig config) { + // TODO Auto-generated method stub + Response response = evt.getResponse(); + ToHeader toHeader = (ToHeader) response.getHeader(ToHeader.NAME); + SipUri uri = (SipUri)toHeader.getAddress().getURI(); + String platformGBId = uri.getAuthority().getUser(); + logger.info(String.format("鏀跺埌 %s 鐨勬敞鍐�%S璇锋眰", platformGBId, response.getStatusCode() )); + + ParentPlatform parentPlatform = storager.queryParentPlatById(platformGBId); + if (parentPlatform == null) { + logger.warn(String.format("鏀跺埌 %s 鐨勬敞鍐�%S璇锋眰, 浣嗘槸骞冲彴淇℃伅鏈煡璇㈠埌!!!", platformGBId, response.getStatusCode())); + return; + } + + if (response.getStatusCode() == 401) { + + WWWAuthenticateHeader www = (WWWAuthenticateHeader)response.getHeader(WWWAuthenticateHeader.NAME); + String realm = www.getRealm(); + String nonce = www.getNonce(); + String scheme = www.getScheme(); + + CallIdHeader callIdHeader = (CallIdHeader)response.getHeader(CallIdHeader.NAME); + String callId = callIdHeader.getCallId(); + sipCommanderForPlatform.register(parentPlatform, callId, realm, nonce, scheme); + }else if (response.getStatusCode() == 200){ + // 娉ㄥ唽鎴愬姛 + logger.info(String.format("%s 娉ㄥ唽鎴愬姛", platformGBId )); + parentPlatform.setStatus(true); + storager.updateParentPlatform(parentPlatform); + } + } + +} diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java index 8842230..b58caae 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java @@ -213,4 +213,11 @@ * @return */ public PageResult<ParentPlatform> queryParentPlatformList(int page, int count); + + /** + * 鑾峰彇涓婄骇骞冲彴 + * @param platformGbId + * @return + */ + public ParentPlatform queryParentPlatById(String platformGbId); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java index 645c803..5e8ba1a 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java @@ -229,4 +229,9 @@ public PageResult<ParentPlatform> queryParentPlatformList(int page, int count) { return null; } + + @Override + public ParentPlatform queryParentPlatById(String platformGbId) { + return null; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java index 0e21167..ad77995 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java @@ -561,6 +561,7 @@ @Override public boolean updateParentPlatform(ParentPlatform parentPlatform) { + // 瀛樺偍device return redis.set(VideoManagerConstants.PLATFORM_PREFIX + parentPlatform.getDeviceGBId(), parentPlatform); } @@ -587,4 +588,9 @@ pageResult.setData(resultData); return pageResult; } + + @Override + public ParentPlatform queryParentPlatById(String platformGbId) { + return (ParentPlatform)redis.get(VideoManagerConstants.PLATFORM_PREFIX + platformGbId); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java index 27dbdd4..8af7cbf 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java @@ -3,6 +3,8 @@ import com.genersoft.iot.vmp.common.PageResult; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.vmanager.device.DeviceController; import org.slf4j.Logger; @@ -23,6 +25,9 @@ @Autowired private IVideoManagerStorager storager; + + @Autowired + private ISIPCommanderForPlatform commanderForPlatform; @GetMapping("/platforms/{count}/{page}") public PageResult<ParentPlatform> platforms(@PathVariable int page, @PathVariable int count){ @@ -53,8 +58,13 @@ ){ return new ResponseEntity<>("missing parameters", HttpStatus.BAD_REQUEST); } + // TODO 妫�鏌ユ槸鍚﹀凡缁忓瓨鍦�,涓旀敞鍐屾垚鍔�, 濡傛灉娉ㄥ唽鎴愬姛,闇�瑕佸厛娉ㄩ攢涔嬪墠鍐�,淇敼骞舵敞鍐� + boolean updateResult = storager.updateParentPlatform(parentPlatform); + if (updateResult) { + commanderForPlatform.register(parentPlatform, null, null, null, null); + return new ResponseEntity<>("success", HttpStatus.OK); }else { return new ResponseEntity<>("fail", HttpStatus.OK); @@ -79,4 +89,17 @@ return new ResponseEntity<>("fail", HttpStatus.OK); } } + + @RequestMapping("/platforms/exit/{deviceGbId}") + @ResponseBody + public ResponseEntity<String> exitPlatform(@PathVariable String deviceGbId){ + + if (logger.isDebugEnabled()) { + logger.debug("鏌ヨ鎵�鏈変笂绾ц澶嘇PI璋冪敤"); + } + ParentPlatform parentPlatform = storager.queryParentPlatById(deviceGbId); + return new ResponseEntity<>(String.valueOf(parentPlatform != null), HttpStatus.OK); + } + + } diff --git a/web_src/src/components/platformEdit.vue b/web_src/src/components/platformEdit.vue index faacdde..7dee4ca 100644 --- a/web_src/src/components/platformEdit.vue +++ b/web_src/src/components/platformEdit.vue @@ -30,7 +30,7 @@ <el-form-item label="鏈湴绔彛" prop="devicePort"> <el-input v-model="platform.devicePort" :disabled="true"></el-input> </el-form-item> - + </el-form> </el-col> <el-col :span="12"> @@ -61,8 +61,8 @@ </el-form-item> <el-form-item label="鍏朵粬閫夐」" > <el-checkbox label="鍚敤" v-model="platform.enable" ></el-checkbox> - <el-checkbox label="鍏佽浜戝彴鎺у埗" v-model="platform.PTZEnable"></el-checkbox> - <el-checkbox label="鍚敤RTCP淇濇椿" v-model="platform.rtcp"></el-checkbox> + <el-checkbox label="浜戝彴鎺у埗" v-model="platform.PTZEnable"></el-checkbox> + <el-checkbox label="RTCP淇濇椿" v-model="platform.rtcp"></el-checkbox> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">{{onSubmit_text}}</el-button> @@ -81,10 +81,26 @@ name: 'platformEdit', props: {}, computed: { - + }, created() {}, data() { + var deviceGBIdRules = async (rule, value, callback) => { + console.log(value) + if (value === '') { + callback(new Error('璇疯緭鍏ヨ澶囧浗鏍囩紪鍙�')); + } else { + var exit = await this.deviceGBIdExit(value); + console.log(exit) + console.log(exit == "true") + console.log(exit === "true") + if (exit) { + callback(new Error('璁惧鍥芥爣缂栧彿宸插瓨鍦�')); + }else { + callback(); + } + } + }; return { listChangeCallback: null, showDialog: false, @@ -145,7 +161,7 @@ { required: true, message:"璇疯緭鍏IP鏈嶅姟绔彛", trigger: 'blur' } ], deviceGBId: [ - { required: true, message:"璇疯緭鍏ヨ澶囧浗鏍囩紪鍙�", trigger: 'blur' } + {validator: deviceGBIdRules, trigger: 'blur' } ], username: [ { required: false, message:"璇疯緭鍏IP璁よ瘉鐢ㄦ埛鍚�", trigger: 'blur' } @@ -176,7 +192,7 @@ this.platform = platform; this.onSubmit_text = "淇濆瓨" } - + }, onSubmit: function () { console.log('onSubmit'); @@ -206,7 +222,19 @@ this.showDialog = false; this.$refs.platform1.resetFields(); this.$refs.platform2.resetFields(); - + }, + deviceGBIdExit: async function (deviceGbId) { + var result = false; + var that = this + await that.$axios.post(`/api/platforms/exit/${deviceGbId}`) + .then(function (res) { + result = res.data; + }) + .catch(function (error) { + console.log(error); + }); + return result; + } } -- Gitblit v1.8.0