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