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