package com.ld.igds.protocol.zldz.command.builder;
|
|
import com.ld.igds.io.request.BaseRequest;
|
import com.ld.igds.protocol.zldz.command.message.Message;
|
import com.ld.igds.protocol.zldz.command.message.MessageBody;
|
import com.ld.igds.protocol.zldz.util.CRC8;
|
import com.ld.igds.protocol.zldz.util.ServerUtils;
|
import com.ld.igds.util.BytesUtil;
|
|
|
/**
|
* 命令生成器
|
*
|
* @author Andy
|
*/
|
public abstract class CommandBuilder {
|
|
/*
|
* 命令创建
|
*
|
* @param order
|
*/
|
public Message buildMessage(BaseRequest request) {
|
Message message = new Message();
|
|
message.setBegin(ServerUtils.MSG_START);
|
|
// 调整Message头部信息
|
buildHeader(message, request);
|
|
//包头校验
|
buildCrc8(message);
|
|
// 创建消息体
|
buildBody(message, request);
|
|
// 添加校验
|
buildCrc16(message);
|
|
message.setEnd(ServerUtils.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(ServerUtils.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()));
|
}
|
|
}
|