package com.genersoft.iot.vmp.gb28181.event.device; 
 | 
  
 | 
import com.genersoft.iot.vmp.gb28181.bean.Device; 
 | 
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; 
 | 
import com.genersoft.iot.vmp.service.IDeviceService; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.context.ApplicationListener; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import javax.sip.ClientTransaction; 
 | 
import javax.sip.address.SipURI; 
 | 
import javax.sip.header.CallIdHeader; 
 | 
import javax.sip.header.ToHeader; 
 | 
import javax.sip.message.Request; 
 | 
  
 | 
/** 
 | 
 * @author lin 
 | 
 */ 
 | 
@Component 
 | 
public class RequestTimeoutEventImpl implements ApplicationListener<RequestTimeoutEvent> { 
 | 
  
 | 
    @Autowired 
 | 
    private IDeviceService deviceService; 
 | 
  
 | 
    @Override 
 | 
    public void onApplicationEvent(RequestTimeoutEvent event) { 
 | 
        ClientTransaction clientTransaction = event.getTimeoutEvent().getClientTransaction(); 
 | 
        if (clientTransaction != null) { 
 | 
            Request request = clientTransaction.getRequest(); 
 | 
            if (request != null) { 
 | 
                String host = ((SipURI) request.getRequestURI()).getHost(); 
 | 
                int port = ((SipURI) request.getRequestURI()).getPort(); 
 | 
                Device device = deviceService.getDeviceByHostAndPort(host, port); 
 | 
                if (device == null) { 
 | 
                    return; 
 | 
                } 
 | 
                deviceService.offline(device.getDeviceId()); 
 | 
            } 
 | 
  
 | 
        } 
 | 
    } 
 | 
} 
 |