1
MrShi
2025-03-18 a836f03a5d1fbfa81e147d09ffdfa87ba3975c13
server/jtt808_parent/jtt808-server/src/main/java/org/yzh/web/endpoint/JTHandlerInterceptor.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
package org.yzh.web.endpoint;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.github.yezhihao.netmc.core.HandlerInterceptor;
import io.github.yezhihao.netmc.session.Session;
import netscape.javascript.JSObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.yzh.commons.util.Byte2NumberUtils;
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 org.yzh.web.model.entity.DeviceDO;
import org.yzh.web.model.enums.SessionKey;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
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);
    }
}