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