From c96ab05d7d0fb9ede820d89ea5e5b55820554e29 Mon Sep 17 00:00:00 2001 From: swwheihei <swwheihei@163.com> Date: 星期四, 16 七月 2020 17:31:41 +0800 Subject: [PATCH] 尝试解决内存溢出,并使用多线程提高性能 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java | 13 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java | 11 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java | 11 src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 177 ++---- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java | 6 src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/DeviceChannel.java | 385 ++++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java | 14 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java | 41 + src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java | 16 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 87 +++ src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/Device.java | 401 +++++++++++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/SIPRequestAbstractProcessor.java | 127 +++++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 77 +- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java | 13 14 files changed, 1,137 insertions(+), 242 deletions(-) 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 0f6a092..9cc9c25 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -2,115 +2,113 @@ import java.text.ParseException; import java.util.Properties; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; -import javax.annotation.PostConstruct; import javax.sip.DialogTerminatedEvent; import javax.sip.IOExceptionEvent; import javax.sip.ListeningPoint; +import javax.sip.PeerUnavailableException; import javax.sip.RequestEvent; import javax.sip.ResponseEvent; -import javax.sip.ServerTransaction; import javax.sip.SipFactory; import javax.sip.SipListener; import javax.sip.SipProvider; import javax.sip.SipStack; import javax.sip.TimeoutEvent; -import javax.sip.TransactionAlreadyExistsException; import javax.sip.TransactionTerminatedEvent; -import javax.sip.TransactionUnavailableException; -import javax.sip.address.AddressFactory; -import javax.sip.header.HeaderFactory; -import javax.sip.header.ViaHeader; -import javax.sip.message.MessageFactory; -import javax.sip.message.Request; import javax.sip.message.Response; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.DependsOn; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; import gov.nist.javax.sip.SipStackImpl; @Component -public class SipLayer implements SipListener, Runnable { +public class SipLayer implements SipListener { private final static Logger logger = LoggerFactory.getLogger(SipLayer.class); @Autowired private SipConfig sipConfig; - private SipProvider tcpSipProvider; - - private SipProvider udpSipProvider; - @Autowired private SIPProcessorFactory processorFactory; private SipStack sipStack; - private AddressFactory addressFactory; - private HeaderFactory headerFactory; - private MessageFactory messageFactory; + private SipFactory sipFactory; - @PostConstruct + /** + * 娑堟伅澶勭悊鍣ㄧ嚎绋嬫睜 + */ + private ThreadPoolExecutor processThreadPool; + + @Bean("initSipServer") + @DependsOn("allOffline") private void initSipServer() { - Thread thread = new Thread(this); - thread.setDaemon(true); - thread.setName("sip server thread start"); - thread.start(); + + int processThreadNum = Runtime.getRuntime().availableProcessors() * 10; + LinkedBlockingQueue<Runnable> processQueue = new LinkedBlockingQueue<Runnable>(10000); + processThreadPool = new ThreadPoolExecutor(processThreadNum,processThreadNum, + 0L,TimeUnit.MILLISECONDS,processQueue, + new ThreadPoolExecutor.CallerRunsPolicy()); } - - @Override - public void run() { - SipFactory sipFactory = SipFactory.getInstance(); + + @Bean("sipFactory") + @DependsOn("initSipServer") + private SipFactory createSipFactory() { + sipFactory = SipFactory.getInstance(); sipFactory.setPathName("gov.nist"); - try { - headerFactory = sipFactory.createHeaderFactory(); - - addressFactory = sipFactory.createAddressFactory(); - messageFactory = sipFactory.createMessageFactory(); - - Properties properties = new Properties(); - properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP"); - properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getSipIp()); - properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false"); - /** - * sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE = - * 0; public static final int TRACE_MESSAGES = 16; public static final int - * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32; - */ - properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32"); - properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log"); - properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log"); - sipStack = (SipStackImpl) sipFactory.createSipStack(properties); - - startTcpListener(); - startUdpListener(); - } catch (Exception e) { - logger.error("Sip Server 鍚姩澶辫触锛� port {" + sipConfig.getSipPort() + "}"); - e.printStackTrace(); - } - logger.info("Sip Server 鍚姩鎴愬姛 port {" + sipConfig.getSipPort() + "}"); + return sipFactory; + } + + @Bean("sipStack") + @DependsOn({"initSipServer", "sipFactory"}) + private SipStack createSipStack() throws PeerUnavailableException { + Properties properties = new Properties(); + properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP"); + properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getSipIp()); + properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false"); + /** + * sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE = + * 0; public static final int TRACE_MESSAGES = 16; public static final int + * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32; + */ + properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "0"); + properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log"); + properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log"); + sipStack = (SipStackImpl) sipFactory.createSipStack(properties); + return sipStack; } - private void startTcpListener() throws Exception { - ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), - "TCP"); - tcpSipProvider = sipStack.createSipProvider(tcpListeningPoint); + @Bean("tcpSipProvider") + @DependsOn("sipStack") + private SipProvider startTcpListener() throws Exception { + ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "TCP"); + SipProvider tcpSipProvider = sipStack.createSipProvider(tcpListeningPoint); tcpSipProvider.addSipListener(this); + logger.info("Sip Server TCP 鍚姩鎴愬姛 port {" + sipConfig.getSipPort() + "}"); + return tcpSipProvider; } - - private void startUdpListener() throws Exception { - ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), - "UDP"); - udpSipProvider = sipStack.createSipProvider(udpListeningPoint); + + @Bean("udpSipProvider") + @DependsOn("sipStack") + private SipProvider startUdpListener() throws Exception { + ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "UDP"); + SipProvider udpSipProvider = sipStack.createSipProvider(udpListeningPoint); udpSipProvider.addSipListener(this); + logger.info("Sip Server TCP 鍚姩鎴愬姛 port {" + sipConfig.getSipPort() + "}"); + return udpSipProvider; } /** @@ -119,8 +117,10 @@ */ @Override public void processRequest(RequestEvent evt) { - ISIPRequestProcessor processor = processorFactory.createRequestProcessor(evt); - processor.process(evt, this); + // 鐢变簬jainsip鏄崟绾跨▼绋嬪簭锛屼负鎻愰珮鎬ц兘骞跺彂澶勭悊 + processThreadPool.execute(() -> { + processorFactory.createRequestProcessor(evt).process(); + }); } @Override @@ -210,53 +210,6 @@ public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) { // TODO Auto-generated method stub - } - - public ServerTransaction getServerTransaction(RequestEvent evt) { - Request request = evt.getRequest(); - ServerTransaction serverTransaction = evt.getServerTransaction(); - // 鍒ゆ柇TCP杩樻槸UDP - boolean isTcp = false; - ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); - String transport = reqViaHeader.getTransport(); - if (transport.equals("TCP")) { - isTcp = true; - } - - if (serverTransaction == null) { - try { - if (isTcp) { - serverTransaction = tcpSipProvider.getNewServerTransaction(request); - } else { - serverTransaction = udpSipProvider.getNewServerTransaction(request); - } - } catch (TransactionAlreadyExistsException e) { - e.printStackTrace(); - } catch (TransactionUnavailableException e) { - e.printStackTrace(); - } - } - return serverTransaction; - } - - public AddressFactory getAddressFactory() { - return addressFactory; - } - - public HeaderFactory getHeaderFactory() { - return headerFactory; - } - - public MessageFactory getMessageFactory() { - return messageFactory; - } - - public SipProvider getTcpSipProvider() { - return tcpSipProvider; - } - - public SipProvider getUdpSipProvider() { - return udpSipProvider; } } 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 a211b6e..88e7ccf 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 @@ -2,13 +2,23 @@ import javax.sip.RequestEvent; import javax.sip.ResponseEvent; +import javax.sip.SipProvider; import javax.sip.header.CSeqHeader; import javax.sip.message.Request; import javax.sip.message.Response; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; +import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler; +import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; +import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.AckRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.ByeRequestProcessor; @@ -23,6 +33,8 @@ 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.redis.RedisUtil; /** * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤) @@ -32,29 +44,31 @@ @Component public class SIPProcessorFactory { - @Autowired - private InviteRequestProcessor inviteRequestProcessor; + private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); @Autowired - private RegisterRequestProcessor registerRequestProcessor; + private SipConfig sipConfig; @Autowired - private SubscribeRequestProcessor subscribeRequestProcessor; + private RegisterLogicHandler handler; @Autowired - private AckRequestProcessor ackRequestProcessor; + private IVideoManagerStorager storager; @Autowired - private ByeRequestProcessor byeRequestProcessor; + private EventPublisher publisher; @Autowired - private CancelRequestProcessor cancelRequestProcessor; + private SIPCommander cmder; @Autowired - private MessageRequestProcessor messageRequestProcessor; + private RedisUtil redis; @Autowired - private OtherRequestProcessor otherRequestProcessor; + private DeferredResultHolder deferredResultHolder; + + @Autowired + private DeviceOffLineDetector offLineDetector; @Autowired private InviteResponseProcessor inviteResponseProcessor; @@ -68,27 +82,64 @@ @Autowired private OtherResponseProcessor otherResponseProcessor; + @Autowired + @Qualifier(value="tcpSipProvider") + private SipProvider tcpSipProvider; + + @Autowired + @Qualifier(value="udpSipProvider") + private SipProvider udpSipProvider; public ISIPRequestProcessor createRequestProcessor(RequestEvent evt) { Request request = evt.getRequest(); String method = request.getMethod(); - + logger.info("鎺ユ敹鍒版秷鎭細"+request.getMethod()); if (Request.INVITE.equals(method)) { - return inviteRequestProcessor; + InviteRequestProcessor processor = new InviteRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(tcpSipProvider); + processor.setUdpSipProvider(udpSipProvider); + return processor; } else if (Request.REGISTER.equals(method)) { - return registerRequestProcessor; + RegisterRequestProcessor processor = new RegisterRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(tcpSipProvider); + processor.setUdpSipProvider(udpSipProvider); + processor.setHandler(handler); + processor.setPublisher(publisher); + processor.setSipConfig(sipConfig); + processor.setVideoManagerStorager(storager); + return processor; } else if (Request.SUBSCRIBE.equals(method)) { - return subscribeRequestProcessor; + SubscribeRequestProcessor processor = new SubscribeRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.ACK.equals(method)) { - return ackRequestProcessor; + AckRequestProcessor processor = new AckRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.BYE.equals(method)) { - return byeRequestProcessor; + ByeRequestProcessor processor = new ByeRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.CANCEL.equals(method)) { - return cancelRequestProcessor; + CancelRequestProcessor processor = new CancelRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.MESSAGE.equals(method)) { - return messageRequestProcessor; + MessageRequestProcessor processor = new MessageRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(tcpSipProvider); + processor.setUdpSipProvider(udpSipProvider); + processor.setPublisher(publisher); + processor.setRedis(redis); + processor.setDeferredResultHolder(deferredResultHolder); + processor.setOffLineDetector(offLineDetector); + processor.setCmder(cmder); + processor.setStorager(storager); + return processor; } else { - return otherRequestProcessor; + return new OtherRequestProcessor(); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java index 8b8475c..82e2f1d 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java @@ -1,9 +1,5 @@ package com.genersoft.iot.vmp.gb28181.transmit.request; -import javax.sip.RequestEvent; - -import com.genersoft.iot.vmp.gb28181.SipLayer; - /** * @Description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚璇锋眰娑堟伅 * @author: swwheihei @@ -11,6 +7,6 @@ */ public interface ISIPRequestProcessor { - public void process(RequestEvent evt, SipLayer layer); + public void process(); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/SIPRequestAbstractProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/SIPRequestAbstractProcessor.java new file mode 100644 index 0000000..5410820 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/SIPRequestAbstractProcessor.java @@ -0,0 +1,127 @@ +package com.genersoft.iot.vmp.gb28181.transmit.request; + +import javax.sip.PeerUnavailableException; +import javax.sip.RequestEvent; +import javax.sip.ServerTransaction; +import javax.sip.SipFactory; +import javax.sip.SipProvider; +import javax.sip.TransactionAlreadyExistsException; +import javax.sip.TransactionUnavailableException; +import javax.sip.address.AddressFactory; +import javax.sip.header.HeaderFactory; +import javax.sip.header.ViaHeader; +import javax.sip.message.MessageFactory; +import javax.sip.message.Request; + +import gov.nist.javax.sip.SipStackImpl; +import gov.nist.javax.sip.message.SIPRequest; +import gov.nist.javax.sip.stack.SIPServerTransaction; + +/** + * @Description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚璇锋眰娑堟伅 + * @author: songww + * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:42:22 + */ +public abstract class SIPRequestAbstractProcessor implements ISIPRequestProcessor { + + protected RequestEvent evt; + + private SipProvider tcpSipProvider; + + private SipProvider udpSipProvider; + + @Override + public void process() { + this.process(evt); + } + + public abstract void process(RequestEvent evt); + + public ServerTransaction getServerTransaction(RequestEvent evt) { + Request request = evt.getRequest(); + ServerTransaction serverTransaction = evt.getServerTransaction(); + // 鍒ゆ柇TCP杩樻槸UDP + boolean isTcp = false; + ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); + String transport = reqViaHeader.getTransport(); + if (transport.equals("TCP")) { + isTcp = true; + } + + if (serverTransaction == null) { + try { + if (isTcp) { + SipStackImpl stack = (SipStackImpl)tcpSipProvider.getSipStack(); + serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true); + if (serverTransaction == null) { + serverTransaction = tcpSipProvider.getNewServerTransaction(request); + } + } else { + SipStackImpl stack = (SipStackImpl)udpSipProvider.getSipStack(); + serverTransaction = (SIPServerTransaction) stack.findTransaction((SIPRequest)request, true); + if (serverTransaction == null) { + serverTransaction = udpSipProvider.getNewServerTransaction(request); + } + } + } catch (TransactionAlreadyExistsException e) { + e.printStackTrace(); + } catch (TransactionUnavailableException e) { + e.printStackTrace(); + } + } + return serverTransaction; + } + + public AddressFactory getAddressFactory() { + try { + return SipFactory.getInstance().createAddressFactory(); + } catch (PeerUnavailableException e) { + e.printStackTrace(); + } + return null; + } + + public HeaderFactory getHeaderFactory() { + try { + return SipFactory.getInstance().createHeaderFactory(); + } catch (PeerUnavailableException e) { + e.printStackTrace(); + } + return null; + } + + public MessageFactory getMessageFactory() { + try { + return SipFactory.getInstance().createMessageFactory(); + } catch (PeerUnavailableException e) { + e.printStackTrace(); + } + return null; + } + + public RequestEvent getRequestEvent() { + return evt; + } + + public void setRequestEvent(RequestEvent evt) { + this.evt = evt; + } + + public SipProvider getTcpSipProvider() { + return tcpSipProvider; + } + + public void setTcpSipProvider(SipProvider tcpSipProvider) { + this.tcpSipProvider = tcpSipProvider; + } + + public SipProvider getUdpSipProvider() { + return udpSipProvider; + } + + public void setUdpSipProvider(SipProvider udpSipProvider) { + this.udpSipProvider = udpSipProvider; + } + + +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java index 44457e8..aebc601 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java @@ -3,14 +3,10 @@ import javax.sip.Dialog; import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; import javax.sip.SipException; import javax.sip.message.Request; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; import gov.nist.javax.sip.header.CSeq; @@ -19,8 +15,7 @@ * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:31:45 */ -@Component -public class AckRequestProcessor implements ISIPRequestProcessor { +public class AckRequestProcessor extends SIPRequestAbstractProcessor { /** * 澶勭悊 ACK璇锋眰 @@ -31,7 +26,7 @@ * @param config */ @Override - public void process(RequestEvent evt, SipLayer layer) { + public void process(RequestEvent evt) { Request request = evt.getRequest(); Dialog dialog = evt.getDialog(); try { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java index 0c17364..0730731 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java @@ -1,20 +1,15 @@ package com.genersoft.iot.vmp.gb28181.transmit.request.impl; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; /** * @Description: BYE璇锋眰澶勭悊鍣� * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:05 */ -@Component -public class ByeRequestProcessor implements ISIPRequestProcessor { +public class ByeRequestProcessor extends SIPRequestAbstractProcessor { /** * 澶勭悊BYE璇锋眰 @@ -25,8 +20,8 @@ * @param config */ @Override - public void process(RequestEvent evt, SipLayer layer) { - // TODO Auto-generated method stub + public void process(RequestEvent evt) { + // TODO 浼樺厛绾�99 Bye Request娑堟伅瀹炵幇锛屾娑堟伅涓�鑸负绾ц仈娑堟伅锛屼笂绾х粰涓嬬骇鍙戦�佽棰戝仠姝㈡寚浠� } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java index 7b6cc31..1b5b886 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java @@ -1,20 +1,15 @@ package com.genersoft.iot.vmp.gb28181.transmit.request.impl; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; /** * @Description:CANCEL璇锋眰澶勭悊鍣� * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:23 */ -@Component -public class CancelRequestProcessor implements ISIPRequestProcessor { +public class CancelRequestProcessor extends SIPRequestAbstractProcessor { /** * 澶勭悊CANCEL璇锋眰 @@ -25,8 +20,8 @@ * @param config */ @Override - public void process(RequestEvent evt, SipLayer layer) { - // TODO Auto-generated method stub + public void process(RequestEvent evt) { + // TODO 浼樺厛绾�99 Cancel Request娑堟伅瀹炵幇锛屾娑堟伅涓�鑸负绾ц仈娑堟伅锛屼笂绾х粰涓嬬骇鍙戦�佽姹傚彇娑堟寚浠� } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java index d3d94ee..ab70a5e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java @@ -1,20 +1,15 @@ package com.genersoft.iot.vmp.gb28181.transmit.request.impl; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; /** * @Description:澶勭悊INVITE璇锋眰 * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:43:52 */ -@Component -public class InviteRequestProcessor implements ISIPRequestProcessor { +public class InviteRequestProcessor extends SIPRequestAbstractProcessor { /** * 澶勭悊invite璇锋眰 @@ -23,8 +18,8 @@ * 璇锋眰娑堟伅 */ @Override - public void process(RequestEvent evt, SipLayer layer) { - // TODO Auto-generated method stub + public void process(RequestEvent evt) { + // TODO 浼樺厛绾�99 Invite Request娑堟伅瀹炵幇锛屾娑堟伅涓�鑸负绾ц仈娑堟伅锛屼笂绾х粰涓嬬骇鍙戦�佽姹傝棰戞寚浠� // Request request = requestEvent.getRequest(); // // try { @@ -45,7 +40,6 @@ // Via via = (Via) headerFactory.createViaHeader(SIPMain.ip, SIPMain.port, "UDP", // callerVia.getBranch() + "sipphone"); // -// // FIXME 闇�瑕佹祴璇曟槸鍚﹁兘澶熼�氳繃璁剧疆VIA澶村煙鏉ヤ慨鏀筕IA澶村煙鍊� // cliReq.removeHeader(Via.NAME); // cliReq.addHeader(via); // diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java index 70ed863..7038590 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java @@ -10,7 +10,6 @@ import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; import javax.sip.SipException; import javax.sip.message.Request; import javax.sip.message.Response; @@ -22,10 +21,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; @@ -35,7 +32,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; import com.genersoft.iot.vmp.gb28181.utils.DateUtil; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -46,38 +43,28 @@ * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:41 */ -@Component -public class MessageRequestProcessor implements ISIPRequestProcessor { +public class MessageRequestProcessor extends SIPRequestAbstractProcessor { private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class); - private ServerTransaction transaction; - - private SipLayer layer; - - @Autowired private SIPCommander cmder; - @Autowired private IVideoManagerStorager storager; - @Autowired private EventPublisher publisher; - @Autowired private RedisUtil redis; - @Autowired private DeferredResultHolder deferredResultHolder; - @Autowired private DeviceOffLineDetector offLineDetector; private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; + private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + private static final String MESSAGE_CONFIG_DOWNLOAD = "ConfigDownload"; private static final String MESSAGE_CATALOG = "Catalog"; private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; - private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; private static final String MESSAGE_ALARM = "Alarm"; private static final String MESSAGE_RECORD_INFO = "RecordInfo"; // private static final String MESSAGE_BROADCAST = "Broadcast"; @@ -93,23 +80,17 @@ * @param transaction */ @Override - public void process(RequestEvent evt, SipLayer layer) { - - this.layer = layer; - this.transaction = layer.getServerTransaction(evt); - - Request request = evt.getRequest(); - SAXReader reader = new SAXReader(); - reader.setEncoding("gbk"); - Document xml; + public void process(RequestEvent evt) { + try { - xml = reader.read(new ByteArrayInputStream(request.getRawContent())); - Element rootElement = xml.getRootElement(); - String cmd = rootElement.element("CmdType").getStringValue(); - + Element rootElement = getRootElement(evt); + String cmd = XmlUtil.getText(rootElement,"CmdType"); + if (MESSAGE_KEEP_ALIVE.equals(cmd)) { logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); processMessageKeepAlive(evt); + } else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) { + logger.info("鎺ユ敹鍒癈onfigDownload娑堟伅"); } else if (MESSAGE_CATALOG.equals(cmd)) { logger.info("鎺ユ敹鍒癈atalog娑堟伅"); processMessageCatalogList(evt); @@ -126,7 +107,6 @@ } catch (DocumentException e) { e.printStackTrace(); } - } /** @@ -273,15 +253,11 @@ try { Element rootElement = getRootElement(evt); String deviceId = XmlUtil.getText(rootElement,"DeviceID"); - Request request = evt.getRequest(); - Response response = null; if (offLineDetector.isOnline(deviceId)) { - response = layer.getMessageFactory().createResponse(Response.OK,request); + responseAck(evt); publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); } else { - response = layer.getMessageFactory().createResponse(Response.BAD_REQUEST,request); } - transaction.sendResponse(response); } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } @@ -373,6 +349,11 @@ } } + private void responseAck(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException { + Response response = getMessageFactory().createResponse(Response.OK,evt.getRequest()); + getServerTransaction(evt).sendResponse(response); + } + private Element getRootElement(RequestEvent evt) throws DocumentException { Request request = evt.getRequest(); SAXReader reader = new SAXReader(); @@ -381,4 +362,28 @@ return xml.getRootElement(); } + public void setCmder(SIPCommander cmder) { + this.cmder = cmder; + } + + public void setStorager(IVideoManagerStorager storager) { + this.storager = storager; + } + + public void setPublisher(EventPublisher publisher) { + this.publisher = publisher; + } + + public void setRedis(RedisUtil redis) { + this.redis = redis; + } + + public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) { + this.deferredResultHolder = deferredResultHolder; + } + + public void setOffLineDetector(DeviceOffLineDetector offLineDetector) { + this.offLineDetector = offLineDetector; + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java index b27c032..63da991 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java @@ -1,20 +1,15 @@ package com.genersoft.iot.vmp.gb28181.transmit.request.impl; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; /** * @Description:鏆備笉鏀寔鐨勬秷鎭姹傚鐞嗗櫒 * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:59 */ -@Component -public class OtherRequestProcessor implements ISIPRequestProcessor { +public class OtherRequestProcessor extends SIPRequestAbstractProcessor { /** * <p>Title: process</p> @@ -25,7 +20,7 @@ * @param config */ @Override - public void process(RequestEvent evt, SipLayer layer) { + public void process(RequestEvent evt) { System.out.println("no support the method! Method:" + evt.getRequest().getMethod()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java index 7f07406..a90429a 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java @@ -7,7 +7,6 @@ import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; import javax.sip.SipException; import javax.sip.header.AuthorizationHeader; import javax.sip.header.ContactHeader; @@ -17,19 +16,16 @@ import javax.sip.message.Request; import javax.sip.message.Response; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import com.genersoft.iot.vmp.common.VideoManagerConstants; import com.genersoft.iot.vmp.conf.SipConfig; -import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper; import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Host; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import gov.nist.javax.sip.address.AddressImpl; @@ -41,19 +37,14 @@ * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:47:25 */ -@Component -public class RegisterRequestProcessor implements ISIPRequestProcessor { +public class RegisterRequestProcessor extends SIPRequestAbstractProcessor { - @Autowired private SipConfig sipConfig; - @Autowired private RegisterLogicHandler handler; - @Autowired private IVideoManagerStorager storager; - @Autowired private EventPublisher publisher; /*** @@ -63,7 +54,7 @@ * 璇锋眰娑堟伅 */ @Override - public void process(RequestEvent evt, SipLayer layer) { + public void process(RequestEvent evt) { try { System.out.println("鏀跺埌娉ㄥ唽璇锋眰锛屽紑濮嬪鐞�"); Request request = evt.getRequest(); @@ -88,14 +79,14 @@ } else if (!passwordCorrect) { System.out.println("瀵嗙爜閿欒 鍥炲401"); } - response = layer.getMessageFactory().createResponse(Response.UNAUTHORIZED, request); - new DigestServerAuthenticationHelper().generateChallenge(layer.getHeaderFactory(), response, sipConfig.getSipDomain()); + response = getMessageFactory().createResponse(Response.UNAUTHORIZED, request); + new DigestServerAuthenticationHelper().generateChallenge(getHeaderFactory(), response, sipConfig.getSipDomain()); } // 鎼哄甫鎺堟潈澶村苟涓斿瘑鐮佹纭� else if (passwordCorrect) { - response = layer.getMessageFactory().createResponse(Response.OK, request); + response = getMessageFactory().createResponse(Response.OK, request); // 娣诲姞date澶� - response.addHeader(layer.getHeaderFactory().createDateHeader(Calendar.getInstance(Locale.ENGLISH))); + response.addHeader(getHeaderFactory().createDateHeader(Calendar.getInstance(Locale.ENGLISH))); ExpiresHeader expiresHeader = (ExpiresHeader) request.getHeader(Expires.NAME); // 娣诲姞Contact澶� response.addHeader(request.getHeader(ContactHeader.NAME)); @@ -141,7 +132,7 @@ device.setTransport(isTcp ? "TCP" : "UDP"); } } - layer.getServerTransaction(evt).sendResponse(response); + getServerTransaction(evt).sendResponse(response); // 娉ㄥ唽鎴愬姛 // 淇濆瓨鍒皉edis // 涓嬪彂catelog鏌ヨ鐩綍 @@ -159,5 +150,21 @@ } } + + public void setSipConfig(SipConfig sipConfig) { + this.sipConfig = sipConfig; + } + + public void setHandler(RegisterLogicHandler handler) { + this.handler = handler; + } + + public void setVideoManagerStorager(IVideoManagerStorager storager) { + this.storager = storager; + } + + public void setPublisher(EventPublisher publisher) { + this.publisher = publisher; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java index b2f1008..010659e 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java @@ -10,18 +10,14 @@ import javax.sip.message.Request; import javax.sip.message.Response; -import org.springframework.stereotype.Component; - -import com.genersoft.iot.vmp.gb28181.SipLayer; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; /** * @Description:SUBSCRIBE璇锋眰澶勭悊鍣� * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:31:20 */ -@Component -public class SubscribeRequestProcessor implements ISIPRequestProcessor { +public class SubscribeRequestProcessor extends SIPRequestAbstractProcessor { /** * 澶勭悊SUBSCRIBE璇锋眰 @@ -32,18 +28,18 @@ * @param config */ @Override - public void process(RequestEvent evt, SipLayer layer) { + public void process(RequestEvent evt) { Request request = evt.getRequest(); try { Response response = null; - response = layer.getMessageFactory().createResponse(200, request); + response = getMessageFactory().createResponse(200, request); if (response != null) { - ExpiresHeader expireHeader = layer.getHeaderFactory().createExpiresHeader(30); + ExpiresHeader expireHeader = getHeaderFactory().createExpiresHeader(30); response.setExpires(expireHeader); } System.out.println("response : " + response.toString()); - ServerTransaction transaction = layer.getServerTransaction(evt); + ServerTransaction transaction = getServerTransaction(evt); if (transaction != null) { transaction.sendResponse(response); transaction.terminate(); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/Device.java b/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/Device.java new file mode 100644 index 0000000..50682f9 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/Device.java @@ -0,0 +1,401 @@ +package com.genersoft.iot.vmp.vmanager.device.entity; + +import java.util.List; + +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.persistence.Transient; +import javax.validation.constraints.Max; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description:瑙嗛璁惧淇℃伅 + * @author: songww + * @date: 2020骞�5鏈�8鏃� 涓嬪崍2:05:56 + */ +@ApiModel(value = "瑙嗛璁惧淇℃伅", description = "瑙嗛璁惧淇℃伅") +@Table(name="VMP_VIDEODEVICES") +public class Device { + + /** + * 璁惧Id + */ + @ApiModelProperty("璁惧缂栧彿") + @Id + @Column(name="DEVICE_ID") + @NotNull(message = "deviceId 涓嶈兘涓� null") + @Size(min = 4, max = 32, message = "deviceId 蹇呴』澶т簬 4 浣嶅苟涓斿皬浜� 32 浣�") + private String deviceId; + + /** + * 璁惧鍚嶇О + */ + @ApiModelProperty("璁惧鍚嶇О") + @Column(name="DEVICE_NAME") + @Size(max = 32, message = "deviceName 蹇呴』灏忎簬 32 浣�") + private String deviceName; + + /** + * 鐢熶骇鍘傚晢 + */ + @ApiModelProperty("鐢熶骇鍘傚晢") + @Column(name="MANUFACTURER") + @Size(max = 64, message = "manufacturer 蹇呴』灏忎簬 64 浣�") + private String manufacturer; + + /** + * 鍨嬪彿 + */ + @ApiModelProperty("鍨嬪彿") + @Column(name="MODEL") + @Size(max = 64, message = "manufacturer 蹇呴』灏忎簬 64 浣�") + private String model; + + /** + * 鍥轰欢鐗堟湰 + */ + @ApiModelProperty("鍥轰欢鐗堟湰") + @Column(name="FIRMWARE") + @Size(max = 64, message = "firmware 蹇呴』灏忎簬 64 浣�") + private String firmware; + + /** + * 閫氫俊鍗忚 + * GB28181 ONVIF + */ + @ApiModelProperty("閫氫俊鍗忚") + @Column(name="PROTOCOL") + @NotNull(message = "protocol 涓嶈兘涓� null") + @Size(max = 16, message = "protocol 蹇呴』灏忎簬 16 浣�") + private String protocol; + + /** + * SIP 浼犺緭鍗忚 + * UDP/TCP + */ + @ApiModelProperty("SIP 浼犺緭鍗忚") + @Column(name="TRANSPORT") + @Size(min = 3,max = 3 ,message = "transport 蹇呴』涓� 3 浣�") + private String transport; + + /** + * 鏁版嵁娴佷紶杈撴ā寮� + * UDP:udp浼犺緭 + * TCP-ACTIVE锛歵cp涓诲姩妯″紡 + * TCP-PASSIVE锛歵cp琚姩妯″紡 + */ + @ApiModelProperty("鏁版嵁娴佷紶杈撴ā寮�") + @Column(name="STREAM_MODE") + @Size(max = 64, message = "streamMode 蹇呴』灏忎簬 16 浣�") + private String streamMode; + + /** + * IP鍦板潃 + */ + @ApiModelProperty("IP鍦板潃") + @Column(name="IP") + @Size(max = 15, message = "streamMode 蹇呴』灏忎簬 15 浣�") + private String ip; + + /** + * 绔彛鍙� + */ + @ApiModelProperty("绔彛鍙�") + @Column(name="PORT") + @Max(value = 65535,message = "port 鏈�澶у�间负 65535") + private Integer port; + + /** + * 鍦ㄧ嚎鐘舵�� 1鍦ㄧ嚎, 0绂荤嚎 + */ + @ApiModelProperty("鍦ㄧ嚎鐘舵��") + @Size(min = 1,max = 1 ,message = "online 蹇呴』涓� 1 浣�") + @Column(name="ONLINE") + private String online; + + /** + * 閫氶亾鏁伴噺 + */ + @ApiModelProperty("閫氶亾鏁伴噺") + @Column(name="CHANNEL_SUM") + @Max(value = 1000000000,message = "channelSum 鏈�澶у�间负 1000000000") + private Integer channelSum; + + @Override + public String toString() { + return "Device{" + + "deviceId='" + deviceId + '\'' + + ", deviceName='" + deviceName + '\'' + + ", manufacturer='" + manufacturer + '\'' + + ", model='" + model + '\'' + + ", firmware='" + firmware + '\'' + + ", protocol='" + protocol + '\'' + + ", transport='" + transport + '\'' + + ", streamMode='" + streamMode + '\'' + + ", ip='" + ip + '\'' + + ", port=" + port + + ", online='" + online + '\'' + + ", channelSum=" + channelSum + + ", createTime='" + createTime + '\'' + + ", registerTime='" + registerTime + '\'' + + ", heartbeatTime='" + heartbeatTime + '\'' + + ", updateTime='" + updateTime + '\'' + + ", updatePerson='" + updatePerson + '\'' + + ", syncTime='" + syncTime + '\'' + + ", syncPerson='" + syncPerson + '\'' + + ", username='" + username + '\'' + + ", password='" + password + '\'' + + ", channelList=" + channelList + + '}'; + } + + /** + * 鍒涘缓鏃堕棿 + */ + @ApiModelProperty("鍒涘缓鏃堕棿") + @Column(name="CREATE_TIME") + private String createTime; + + /** + * 娉ㄥ唽鏃堕棿 + */ + @ApiModelProperty("娉ㄥ唽鏃堕棿") + @Column(name="REGISTER_TIME") + private String registerTime; + + /** + * 蹇冭烦鏃堕棿 + */ + @ApiModelProperty("蹇冭烦鏃堕棿") + @Column(name="HEARTBEAT_TIME") + private String heartbeatTime; + + /** + * 淇敼鏃堕棿 + */ + @ApiModelProperty("鏇存柊鏃堕棿") + @Column(name="UPDATE_TIME") + private String updateTime; + + /** + * 淇敼浜� + */ + @ApiModelProperty("淇敼浜�") + @Column(name="UPDATE_PERSON") + private String updatePerson; + + /** + * 鍚屾鏃堕棿 + */ + @ApiModelProperty("鍚屾鏃堕棿") + @Column(name="SYNC_TIME") + private String syncTime; + + /** + * 鍚屾浜� + */ + @ApiModelProperty("鍚屾浜�") + @Column(name="SYNC_PERSON") + private String syncPerson; + + /** + * ONVIF鍗忚-鐢ㄦ埛鍚� + */ + @ApiModelProperty("鐢ㄦ埛鍚�") + @Column(name="USERNAME") + @Size(max = 32, message = "username 蹇呴』灏忎簬 32 浣�") + private String username; + + /** + * ONVIF鍗忚-瀵嗙爜 + */ + @ApiModelProperty("瀵嗙爜") + @Size(max = 32, message = "password 蹇呴』灏忎簬 32 浣�") + @Column(name="PASSWORD") + private String password; + + @Transient + private List<DeviceChannel> channelList; + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getDeviceName() { + return deviceName; + } + + public void setDeviceName(String deviceName) { + this.deviceName = deviceName; + } + + public String getTransport() { + return transport; + } + + public void setTransport(String transport) { + this.transport = transport; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public String getManufacturer() { + return manufacturer; + } + + public void setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getFirmware() { + return firmware; + } + + public void setFirmware(String firmware) { + this.firmware = firmware; + } + + public String getOnline() { + return online; + } + + public void setOnline(String online) { + this.online = online; + } + + public String getStreamMode() { + return streamMode; + } + + public void setStreamMode(String streamMode) { + this.streamMode = streamMode; + } + + public List<DeviceChannel> getChannelList() { + return channelList; + } + + public void setChannelList(List<DeviceChannel> channelList) { + this.channelList = channelList; + } + + public Integer getChannelSum() { + return channelSum; + } + + public void setChannelSum(Integer channelSum) { + this.channelSum = channelSum; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getRegisterTime() { + return registerTime; + } + + public void setRegisterTime(String registerTime) { + this.registerTime = registerTime; + } + + public String getHeartbeatTime() { + return heartbeatTime; + } + + public void setHeartbeatTime(String heartbeatTime) { + this.heartbeatTime = heartbeatTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getUpdatePerson() { + return updatePerson; + } + + public void setUpdatePerson(String updatePerson) { + this.updatePerson = updatePerson; + } + + public String getSyncTime() { + return syncTime; + } + + public void setSyncTime(String syncTime) { + this.syncTime = syncTime; + } + + public String getSyncPerson() { + return syncPerson; + } + + public void setSyncPerson(String syncPerson) { + this.syncPerson = syncPerson; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/DeviceChannel.java new file mode 100644 index 0000000..35d6293 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/device/entity/DeviceChannel.java @@ -0,0 +1,385 @@ +package com.genersoft.iot.vmp.vmanager.device.entity; + +import javax.persistence.Column; +import javax.persistence.Id; +import javax.persistence.Table; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * @Description:璁惧閫氶亾淇℃伅 + * @author: songww + * @date: 2020骞�5鏈�20鏃� 涓嬪崍9:00:46 + */ +@ApiModel(value = "璁惧閫氶亾淇℃伅", description = "璁惧閫氶亾淇℃伅") +@Table(name="VMP_VIDEOCHANNELS") +public class DeviceChannel { + + /** + * 閫氶亾缂栧彿 + */ + @ApiModelProperty("閫氶亾缂栧彿") + @Id + @Column(name="CHANNEL_ID") + private String channelId; + + /** + * 璁惧缂栧彿 + */ + @ApiModelProperty("璁惧缂栧彿") + @Column(name="DEVICE_ID") + private String deviceId; + + /** + * 閫氶亾鍚� + */ + @ApiModelProperty("閫氶亾鍚�") + @Column(name="CHANNEL_NAME") + private String channelName; + + /** + * 鐢熶骇鍘傚晢 + */ + @ApiModelProperty("鐢熶骇鍘傚晢") + @Column(name="MANUFACTURER") + private String manufacture; + + /** + * 鍨嬪彿 + */ + @ApiModelProperty("鍨嬪彿") + @Column(name="MODEL") + private String model; + + /** + * 璁惧褰掑睘 + */ + @ApiModelProperty("璁惧褰掑睘") + @Column(name="OWNER") + private String owner; + + /** + * 琛屾斂鍖哄煙 + */ + @ApiModelProperty("琛屾斂鍖哄煙") + @Column(name="CIVIL_CODE") + private String civilCode; + + /** + * 璀﹀尯 + */ + @ApiModelProperty("璀﹀尯") + @Column(name="BLOCK") + private String block; + + /** + * 瀹夎鍦板潃 + */ + @ApiModelProperty("瀹夎鍦板潃") + @Column(name="ADDRESS") + private String address; + + /** + * 鏄惁鏈夊瓙璁惧 1鏈�, 0娌℃湁 + */ + @ApiModelProperty("鏄惁鏈夊瓙璁惧") + @Column(name="PARENTAL") + private String parental; + + /** + * 鐖剁骇id + */ + @ApiModelProperty("鐖剁骇缂栫爜") + @Column(name="PARENT_ID") + private String parentId; + + /** + * 淇′护瀹夊叏妯″紡 缂虹渷涓�0; 0:涓嶉噰鐢�; 2: S/MIME绛惧悕鏂瑰紡; 3: S/ MIME鍔犲瘑绛惧悕鍚屾椂閲囩敤鏂瑰紡; 4:鏁板瓧鎽樿鏂瑰紡 + */ + @ApiModelProperty("淇′护瀹夊叏妯″紡") + @Column(name="SAFETY_WAY") + private String safetyWay; + + /** + * 娉ㄥ唽鏂瑰紡 缂虹渷涓�1;1:绗﹀悎IETFRFC3261鏍囧噯鐨勮璇佹敞鍐屾ā 寮�; 2:鍩轰簬鍙d护鐨勫弻鍚戣璇佹敞鍐屾ā寮�; 3:鍩轰簬鏁板瓧璇佷功鐨勫弻鍚戣璇佹敞鍐屾ā寮� + */ + @ApiModelProperty("娉ㄥ唽鏂瑰紡") + @Column(name="REGISTER_WAY") + private String registerWay; + + /** + * 璇佷功搴忓垪鍙� + */ + @ApiModelProperty("璇佷功搴忓垪鍙�") + @Column(name="CERT_NUM") + private String certNum; + + /** + * 璇佷功鏈夋晥鏍囪瘑 缂虹渷涓�0;璇佷功鏈夋晥鏍囪瘑:0:鏃犳晥1: 鏈夋晥 + */ + @ApiModelProperty("璇佷功鏈夋晥鏍囪瘑") + @Column(name="CERT_VALID") + private String certValid; + + /** + * 璇佷功鏃犳晥鍘熷洜鐮� + */ + @ApiModelProperty("璇佷功鏃犳晥鍘熷洜鐮�") + @Column(name="CERT_ERRCODE") + private String certErrCode; + + /** + * 璇佷功缁堟鏈夋晥鏈� + */ + @ApiModelProperty("璇佷功缁堟鏈夋晥鏈�") + @Column(name="CERT_ENDTIME") + private String certEndTime; + + /** + * 淇濆瘑灞炴�� 缂虹渷涓�0; 0:涓嶆秹瀵�, 1:娑夊瘑 + */ + @ApiModelProperty("淇濆瘑灞炴��") + @Column(name="SECRECY") + private String secrecy; + + /** + * IP鍦板潃 + */ + @ApiModelProperty("IP鍦板潃") + @Column(name="IP") + private String ip; + + /** + * 绔彛鍙� + */ + @ApiModelProperty("绔彛鍙�") + @Column(name="PORT") + private Integer port; + + /** + * 瀵嗙爜 + */ + @ApiModelProperty("瀵嗙爜") + @Column(name="PASSWORD") + private String password; + + /** + * 鍦ㄧ嚎/绂荤嚎 + * 1鍦ㄧ嚎,0绂荤嚎 + * 榛樿鍦ㄧ嚎 + * 淇′护: + * <Status>ON</Status> + * <Status>OFF</Status> + * 閬囧埌杩嘚VR涓嬬殑IPC涓嬪彂淇′护鍙互鎺ㄦ祦锛� 浣嗘槸 Status 鍝嶅簲 OFF + */ + @ApiModelProperty("鐘舵��") + @Column(name="ONLINE") + private String online; + + /** + * 缁忓害 + */ + @ApiModelProperty("缁忓害") + @Column(name="LONGITUDE") + private double longitude; + + /** + * 绾害 + */ + @ApiModelProperty("绾害") + @Column(name="LATITUDE") + private double latitude; + + public String getChannelId() { + return channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getChannelName() { + return channelName; + } + + public void setChannelName(String channelName) { + this.channelName = channelName; + } + + public String getOnline() { + return online; + } + + public void setOnline(String online) { + this.online = online; + } + + public String getManufacture() { + return manufacture; + } + + public void setManufacture(String manufacture) { + this.manufacture = manufacture; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getCivilCode() { + return civilCode; + } + + public void setCivilCode(String civilCode) { + this.civilCode = civilCode; + } + + public String getBlock() { + return block; + } + + public void setBlock(String block) { + this.block = block; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getParental() { + return parental; + } + + public void setParental(String parental) { + this.parental = parental; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getSafetyWay() { + return safetyWay; + } + + public void setSafetyWay(String safetyWay) { + this.safetyWay = safetyWay; + } + + public String getRegisterWay() { + return registerWay; + } + + public void setRegisterWay(String registerWay) { + this.registerWay = registerWay; + } + + public String getCertNum() { + return certNum; + } + + public void setCertNum(String certNum) { + this.certNum = certNum; + } + + public String getCertValid() { + return certValid; + } + + public void setCertValid(String certValid) { + this.certValid = certValid; + } + + public String getCertErrCode() { + return certErrCode; + } + + public void setCertErrCode(String certErrCode) { + this.certErrCode = certErrCode; + } + + public String getCertEndTime() { + return certEndTime; + } + + public void setCertEndTime(String certEndTime) { + this.certEndTime = certEndTime; + } + + public String getSecrecy() { + return secrecy; + } + + public void setSecrecy(String secrecy) { + this.secrecy = secrecy; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } +} -- Gitblit v1.8.0