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/SIPProcessorFactory.java |   87 ++++++++++++++++++++++++++++++++++---------
 1 files changed, 69 insertions(+), 18 deletions(-)

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();
 		}
 	}
 	

--
Gitblit v1.8.0