From 534be3f5809f430cb46cb0fcbba99d3d425f2324 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 07 六月 2023 20:58:35 +0800 Subject: [PATCH] 支持redis消息强制关闭流 --- src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java | 35 +++++++++++++++++++++-------------- 1 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java index b3fd82e..75751ad 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java @@ -1,12 +1,16 @@ package com.genersoft.iot.vmp.gb28181.event; import com.genersoft.iot.vmp.gb28181.bean.DeviceNotFoundEvent; +import gov.nist.javax.sip.message.SIPRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import javax.sip.*; +import javax.sip.DialogTerminatedEvent; +import javax.sip.ResponseEvent; +import javax.sip.TimeoutEvent; +import javax.sip.TransactionTerminatedEvent; import javax.sip.header.CallIdHeader; import javax.sip.message.Response; import java.time.Instant; @@ -27,6 +31,7 @@ private Map<String, SipSubscribe.Event> okSubscribes = new ConcurrentHashMap<>(); private Map<String, Instant> okTimeSubscribes = new ConcurrentHashMap<>(); + private Map<String, Instant> errorTimeSubscribes = new ConcurrentHashMap<>(); // @Scheduled(cron="*/5 * * * * ?") //姣忎簲绉掓墽琛屼竴娆� @@ -55,8 +60,7 @@ logger.debug("errorSubscribes.size:{}",errorSubscribes.size()); } - public interface Event { - void response(EventResult eventResult); + public interface Event { void response(EventResult eventResult) ; } /** @@ -72,7 +76,9 @@ // 浼氳瘽宸茬粨鏉� dialogTerminated, // 璁惧鏈壘鍒� - deviceNotFoundEvent + deviceNotFoundEvent, + // 璁惧鏈壘鍒� + cmdSendFailEvent } public static class EventResult<EventObject>{ @@ -80,7 +86,6 @@ public EventResultType type; public String msg; public String callId; - public Dialog dialog; public EventObject event; public EventResult() { @@ -91,7 +96,6 @@ if (event instanceof ResponseEvent) { ResponseEvent responseEvent = (ResponseEvent)event; Response response = responseEvent.getResponse(); - this.dialog = responseEvent.getDialog(); this.type = EventResultType.response; if (response != null) { this.msg = response.getReasonPhrase(); @@ -104,29 +108,32 @@ this.type = EventResultType.timeout; this.msg = "娑堟伅瓒呮椂鏈洖澶�"; this.statusCode = -1024; - this.dialog = timeoutEvent.getClientTransaction().getDialog(); - this.callId = this.dialog != null?timeoutEvent.getClientTransaction().getDialog().getCallId().getCallId(): null; + if (timeoutEvent.isServerTransaction()) { + this.callId = ((SIPRequest)timeoutEvent.getServerTransaction().getRequest()).getCallIdHeader().getCallId(); + }else { + this.callId = ((SIPRequest)timeoutEvent.getClientTransaction().getRequest()).getCallIdHeader().getCallId(); + } }else if (event instanceof TransactionTerminatedEvent) { TransactionTerminatedEvent transactionTerminatedEvent = (TransactionTerminatedEvent)event; this.type = EventResultType.transactionTerminated; this.msg = "浜嬪姟宸茬粨鏉�"; this.statusCode = -1024; - this.callId = transactionTerminatedEvent.getClientTransaction().getDialog().getCallId().getCallId(); - this.dialog = transactionTerminatedEvent.getClientTransaction().getDialog(); + if (transactionTerminatedEvent.isServerTransaction()) { + this.callId = ((SIPRequest)transactionTerminatedEvent.getServerTransaction().getRequest()).getCallIdHeader().getCallId(); + }else { + this.callId = ((SIPRequest)transactionTerminatedEvent.getClientTransaction().getRequest()).getCallIdHeader().getCallId(); + } }else if (event instanceof DialogTerminatedEvent) { DialogTerminatedEvent dialogTerminatedEvent = (DialogTerminatedEvent)event; this.type = EventResultType.dialogTerminated; this.msg = "浼氳瘽宸茬粨鏉�"; this.statusCode = -1024; this.callId = dialogTerminatedEvent.getDialog().getCallId().getCallId(); - this.dialog = dialogTerminatedEvent.getDialog(); }else if (event instanceof DeviceNotFoundEvent) { - DeviceNotFoundEvent deviceNotFoundEvent = (DeviceNotFoundEvent)event; this.type = EventResultType.deviceNotFoundEvent; this.msg = "璁惧鏈壘鍒�"; this.statusCode = -1024; - this.dialog = deviceNotFoundEvent.getDialog(); - this.callId = this.dialog != null ?deviceNotFoundEvent.getDialog().getCallId().getCallId() : null; + this.callId = ((DeviceNotFoundEvent) event).getCallId(); } } } -- Gitblit v1.8.0