package com.doumee.jtt808.web.endpoint; 
 | 
  
 | 
import io.github.yezhihao.netmc.core.HandlerInterceptor; 
 | 
import io.github.yezhihao.netmc.session.Session; 
 | 
import org.slf4j.Logger; 
 | 
import org.slf4j.LoggerFactory; 
 | 
import org.yzh.protocol.basics.JTMessage; 
 | 
import org.yzh.protocol.commons.JT808; 
 | 
import org.yzh.protocol.commons.transform.AttributeKey; 
 | 
import org.yzh.protocol.commons.transform.attribute.Battery; 
 | 
import org.yzh.protocol.t808.T0001; 
 | 
import org.yzh.protocol.t808.T0200; 
 | 
import com.doumee.jtt808.web.model.entity.DeviceDO; 
 | 
import com.doumee.jtt808.web.model.enums.SessionKey; 
 | 
  
 | 
public class JTHandlerInterceptor implements HandlerInterceptor<JTMessage> { 
 | 
  
 | 
    private static final Logger log = LoggerFactory.getLogger(JTHandlerInterceptor.class); 
 | 
  
 | 
    /** 未找到对应的Handle */ 
 | 
    @Override 
 | 
    public JTMessage notSupported(JTMessage request, Session session) { 
 | 
        T0001 response = new T0001(); 
 | 
        response.copyBy(request); 
 | 
        response.setMessageId(JT808.平台通用应答); 
 | 
        response.setSerialNo(session.nextSerialNo()); 
 | 
  
 | 
        response.setResponseSerialNo(request.getSerialNo()); 
 | 
        response.setResponseMessageId(request.getMessageId()); 
 | 
        response.setResultCode(T0001.NotSupport); 
 | 
  
 | 
        log.info("{}\n<<<<-未识别的消息{}\n>>>>-{}", session, request, response); 
 | 
        return response; 
 | 
    } 
 | 
  
 | 
  
 | 
    /** 调用之后,返回值为void的 */ 
 | 
    @Override 
 | 
    public JTMessage successful(JTMessage request, Session session) { 
 | 
        T0001 response = new T0001(); 
 | 
        response.copyBy(request); 
 | 
        response.setMessageId(JT808.平台通用应答); 
 | 
        response.setSerialNo(session.nextSerialNo()); 
 | 
  
 | 
        response.setResponseSerialNo(request.getSerialNo()); 
 | 
        response.setResponseMessageId(request.getMessageId()); 
 | 
        response.setResultCode(T0001.Success); 
 | 
        log.info(session.getId()); 
 | 
//        log.info("{}\n<<<<-{}\n>>>>-{}", session, request, response); 
 | 
        return response; 
 | 
    } 
 | 
  
 | 
    /** 调用之后抛出异常的 */ 
 | 
    @Override 
 | 
    public JTMessage exceptional(JTMessage request, Session session, Exception e) { 
 | 
        T0001 response = new T0001(); 
 | 
        response.copyBy(request); 
 | 
        response.setMessageId(JT808.平台通用应答); 
 | 
        response.setSerialNo(session.nextSerialNo()); 
 | 
  
 | 
        response.setResponseSerialNo(request.getSerialNo()); 
 | 
        response.setResponseMessageId(request.getMessageId()); 
 | 
        response.setResultCode(T0001.Failure); 
 | 
  
 | 
        log.warn(session + "\n<<<<-" + request + "\n>>>>-" + response + '\n', e); 
 | 
        return response; 
 | 
    } 
 | 
  
 | 
    /** 调用之前 */ 
 | 
    @Override 
 | 
    public boolean beforeHandle(JTMessage request, Session session) { 
 | 
        int messageId = request.getMessageId(); 
 | 
        if (messageId == JT808.终端注册 || messageId == JT808.终端鉴权) 
 | 
            return true; 
 | 
        boolean transform = request.transform(); 
 | 
        if (messageId == JT808.位置信息汇报) { 
 | 
            DeviceDO device = SessionKey.getDevice(session); 
 | 
            if (device != null){ 
 | 
                device.setLocation((T0200) request); 
 | 
                if(device.getLocation()!=null && device.getLocation().getAttributes()!=null ){ 
 | 
                   Battery battery= (Battery) device.getLocation().getAttributes().get(AttributeKey.Battery); 
 | 
                    if(battery !=null){ 
 | 
                        device.setBatteryVoltage(battery.getVoltage()); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
  
 | 
            return transform; 
 | 
        } 
 | 
        if (!session.isRegistered()) { 
 | 
            log.info("{}未注册的设备<<<<-{}", session, request); 
 | 
            return true; 
 | 
        } 
 | 
        return true; 
 | 
    } 
 | 
  
 | 
    /** 调用之后 */ 
 | 
    @Override 
 | 
    public void afterHandle(JTMessage request, JTMessage response, Session session) { 
 | 
        if (response != null) { 
 | 
            response.copyBy(request); 
 | 
            response.setSerialNo(session.nextSerialNo()); 
 | 
  
 | 
            if (response.getMessageId() == 0) { 
 | 
                response.setMessageId(response.reflectMessageId()); 
 | 
            } 
 | 
        } 
 | 
//        log.info("{}\n<<<<-{}\n>>>>-{}", session, request, response); 
 | 
    } 
 | 
} 
 |