package com.fzzy.protocol.zldz.cmd; import com.fzzy.api.utils.BytesUtil; import com.fzzy.io.request.BaseRequest; import com.fzzy.protocol.zldz.data.Message; import com.fzzy.protocol.zldz.data.MessageBody; import com.fzzy.protocol.zldz.server.ZldzServerUtil; import com.fzzy.protocol.zldz.util.*; /** * 命令生成器 * * @author Andy */ public abstract class CommandBuilder { /* * 命令创建 * * @param order */ public Message buildMessage(BaseRequest request) { Message message = new Message(); message.setBegin(ZldzServerUtil.MSG_START); // 调整Message头部信息 buildHeader(message, request); //包头校验 buildCrc8(message); // 创建消息体 buildBody(message, request); // 添加校验 buildCrc16(message); message.setEnd(ZldzServerUtil.MSG_END); // 生成整体命令信息和BYte信息 build(message); return message; } public void buildHeader(Message message, BaseRequest request) { String hexCompanyId = BytesUtil.getTargetId(request.getCompanyId(),true); hexCompanyId = BytesUtil.tran_LH(hexCompanyId); message.setSourceId(hexCompanyId); message.setSendId(hexCompanyId); message.setCompanyId(hexCompanyId); message.setSourceId(BytesUtil.getTargetId(request.getSerId(), true)); message.setMessageType(ZldzServerUtil.MSG_TYPE_1116); } public void buildBody(Message message, BaseRequest request) { MessageBody body = new MessageBody(); body.setContent(""); body.setLength(0); message.setBody(body); } public void buildCrc8(Message message) { StringBuffer hexSbCrc8 = new StringBuffer(); hexSbCrc8.append(message.getSourceId()); hexSbCrc8.append(message.getTargetId()); hexSbCrc8.append(message.getSendId()); hexSbCrc8.append(message.getGateway1()); hexSbCrc8.append(message.getGateway2()); hexSbCrc8.append(message.getMessageType()); hexSbCrc8.append(message.getResult()); hexSbCrc8.append(message.getCompanyId()); byte[] bytes = BytesUtil.hexStrToBytes(hexSbCrc8.toString()); byte crc8 = CRC8.calcCrc8(bytes, (short) 0, (short) (bytes.length), (byte) 0); message.setHexCrc8(BytesUtil.byteToHex(crc8)); } public void buildCrc16(Message message) { StringBuffer hexSbCrc16 = new StringBuffer(); hexSbCrc16.append(message.getSourceId()); hexSbCrc16.append(message.getTargetId()); hexSbCrc16.append(message.getSendId()); hexSbCrc16.append(message.getGateway1()); hexSbCrc16.append(message.getGateway2()); hexSbCrc16.append(message.getMessageType()); hexSbCrc16.append(message.getResult()); hexSbCrc16.append(message.getCompanyId()); hexSbCrc16.append(message.getHexCrc8()); hexSbCrc16.append(BytesUtil.tran_LH(BytesUtil .getHex2LenStr(message.getBody().getLength()))); hexSbCrc16.append(message.getBody().getContent()); byte[] byteCrc16 = BytesUtil.hexStrToBytes(hexSbCrc16.toString()); short crc16Hex2 = CRC8.calculateCrc16(byteCrc16, (short) 0, (short) (byteCrc16.length)); byte[] crc16Hex2Bytes = BytesUtil.shortToByte(crc16Hex2); int crc16 = BytesUtil.bytesToInt(crc16Hex2Bytes); message.setHexCrc16(BytesUtil.intToHexStr(crc16)); } /** * 根据生成的命令,进行调整 * * @param message */ public void build(Message message) { StringBuffer hexSb = new StringBuffer(); hexSb.append(message.getBegin()); hexSb.append(message.getSourceId()); hexSb.append(message.getTargetId()); hexSb.append(message.getSendId()); hexSb.append(message.getGateway1()); hexSb.append(message.getGateway2()); hexSb.append(message.getMessageType()); hexSb.append(message.getResult()); hexSb.append(message.getCompanyId()); hexSb.append(message.getHexCrc8()); hexSb.append(BytesUtil.tran_LH(BytesUtil .getHex2LenStr(message.getBody().getLength()))); hexSb.append(message.getBody().getContent()); hexSb.append(message.getHexCrc16()); hexSb.append(message.getEnd()); message.setStrMsg(hexSb.toString()); message.setByteMsg(BytesUtil.hexStrToBytes(message.getStrMsg())); } }