Newer
Older
br-data-forwarding / src / main / java / com / casic / tube / protocol / CasicTubeProtocolImpl.java
tanyue on 3 Jul 2024 1 KB 20240703 初始提交
package com.casic.tube.protocol;

import com.alibaba.fastjson.JSONObject;
import com.casic.common.CasicProtocol;
import org.springframework.stereotype.Component;

@Component
public class CasicTubeProtocolImpl implements CasicProtocol {
    @Override
    public boolean checkFrame(String frame) {
        boolean valid = checkFrameHeaderAndTail(frame);
        if (valid) {
            valid = checkFrameLength(frame);
        }

        return valid;
    }

    private boolean checkFrameHeaderAndTail(String frame) {
        return (frame.substring(0, 2).equalsIgnoreCase("AA")) &&
                (frame.substring(frame.length() - 2).equalsIgnoreCase("FF"));
    }

    private boolean checkFrameLength(String frame) {
        String lengthStr = frame.substring(4, 7);
        int length = Integer.parseInt(lengthStr);

        return frame.length() == length + 9;
    }

    @Override
    public String getDeviceType(String frame) {
        return frame.substring(7, 9);
    }

    @Override
    public String getDeviceId(String frame) {
        return frame.substring(9, 21);
    }

    @Override
    public String getManufacturerCode(String frame) {
        return frame.substring(11, 13);
    }

    @Override
    public String getMessageType(String frame) {
        return frame.substring(21, 23);
    }

    @Override
    public String getMessageBody(String frame) {
        return frame.substring(26, frame.length() - 16);
    }

    @Override
    public JSONObject parseMessageBody(String messageBody) {
        return JSONObject.parseObject(messageBody);
    }

    @Override
    public String getUptime(String frame) {
        return frame.substring(frame.length() - 16, frame.length() - 2);
    }
}