package com.genersoft.iot.vmp.gb28181.transmit.event.timeout.impl; import com.genersoft.iot.vmp.conf.SystemInfoTimerTask; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.event.timeout.ITimeoutProcessor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.sip.TimeoutEvent; import javax.sip.header.CallIdHeader; @Component public class TimeoutProcessorImpl implements InitializingBean, ITimeoutProcessor { private Logger logger = LoggerFactory.getLogger(TimeoutProcessorImpl.class); @Autowired private SIPProcessorObserver processorObserver; @Autowired private SipSubscribe sipSubscribe; @Override public void afterPropertiesSet() throws Exception { processorObserver.addTimeoutProcessor(this); } @Override public void process(TimeoutEvent event) { try { // TODO Auto-generated method stub CallIdHeader callIdHeader = event.getClientTransaction().getDialog().getCallId(); String callId = callIdHeader.getCallId(); SipSubscribe.Event errorSubscribe = sipSubscribe.getErrorSubscribe(callId); SipSubscribe.EventResult timeoutEventEventResult = new SipSubscribe.EventResult<>(event); errorSubscribe.response(timeoutEventEventResult); sipSubscribe.removeErrorSubscribe(callId); sipSubscribe.removeOkSubscribe(callId); } catch (Exception e) { logger.error("[超时事件失败]: {}", e.getMessage()); } } }