diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 6212b00..dc1ab97 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -43,7 +43,6 @@ if (protocolConfig == null) { return rematch(byteBuf); } - //暂时先取第一个, 减少类的创建销毁与构建 AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); ByteBuf wholeDatagramByte = null; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 6212b00..dc1ab97 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -43,7 +43,6 @@ if (protocolConfig == null) { return rematch(byteBuf); } - //暂时先取第一个, 减少类的创建销毁与构建 AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); ByteBuf wholeDatagramByte = null; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java index 5af9639..d19cadd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java @@ -55,7 +55,7 @@ */ private static Boolean doMacthLeadCode(String preFix, String matchContent) { Integer preFixLength = preFix.length(); - String beMatchContent = matchContent.substring(0, preFixLength - 1); + String beMatchContent = matchContent.substring(0, preFixLength); return beMatchContent.equals(preFix); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 6212b00..dc1ab97 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -43,7 +43,6 @@ if (protocolConfig == null) { return rematch(byteBuf); } - //暂时先取第一个, 减少类的创建销毁与构建 AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); ByteBuf wholeDatagramByte = null; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java index 5af9639..d19cadd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java @@ -55,7 +55,7 @@ */ private static Boolean doMacthLeadCode(String preFix, String matchContent) { Integer preFixLength = preFix.length(); - String beMatchContent = matchContent.substring(0, preFixLength - 1); + String beMatchContent = matchContent.substring(0, preFixLength); return beMatchContent.equals(preFix); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java index 97cc984..40a5265 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java @@ -40,7 +40,7 @@ String httpContent = msg.toString(Charset.defaultCharset()); log.info(" String : " + msg.toString(Charset.defaultCharset())); String majorContent = httpContent.substring(httpContent.indexOf("{"), httpContent.lastIndexOf("}") + 1); - String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("RegistryData")).get("Value")); + String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("serviceData")).get("Value")); log.info("----------------------------------" + values); ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); bufferContent.writeBytes(values.getBytes(Charset.forName("ISO-8859-1"))); diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 6212b00..dc1ab97 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -43,7 +43,6 @@ if (protocolConfig == null) { return rematch(byteBuf); } - //暂时先取第一个, 减少类的创建销毁与构建 AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); ByteBuf wholeDatagramByte = null; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java index 5af9639..d19cadd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java @@ -55,7 +55,7 @@ */ private static Boolean doMacthLeadCode(String preFix, String matchContent) { Integer preFixLength = preFix.length(); - String beMatchContent = matchContent.substring(0, preFixLength - 1); + String beMatchContent = matchContent.substring(0, preFixLength); return beMatchContent.equals(preFix); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java index 97cc984..40a5265 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java @@ -40,7 +40,7 @@ String httpContent = msg.toString(Charset.defaultCharset()); log.info(" String : " + msg.toString(Charset.defaultCharset())); String majorContent = httpContent.substring(httpContent.indexOf("{"), httpContent.lastIndexOf("}") + 1); - String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("RegistryData")).get("Value")); + String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("serviceData")).get("Value")); log.info("----------------------------------" + values); ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); bufferContent.writeBytes(values.getBytes(Charset.forName("ISO-8859-1"))); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java index 8a516e5..3d92bfe 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.registry.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.mapper.ProtocolConfigMapper; import com.casic.missiles.pojo.ProtocolConfig; @@ -18,8 +19,9 @@ */ @Override public List getProtocolConfigList(String firstChar) { - - return this.baseMapper.selectList(null); + QueryWrapper queryWrapper = new QueryWrapper() + .likeRight("pre_fix", firstChar); + return this.baseMapper.selectList(queryWrapper); } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java index a2d4ff1..6a67a33 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/CommandDelivery.java @@ -1,10 +1,8 @@ package com.casic.missiles.delivery; import cn.hutool.core.util.ObjectUtil; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; import com.casic.missiles.parser.safe.SafeStrategy; import com.casic.missiles.util.ApplicationContextUtil; -import com.casic.missiles.mapper.dao.FieldConfigDao; import com.casic.missiles.pojo.FieldConfig; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufAllocator; @@ -12,123 +10,122 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; -import org.springframework.stereotype.Registry; - +import org.springframework.stereotype.Component; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Registry +@Component @Slf4j @AllArgsConstructor public class CommandDelivery { - private final FieldConfigDao fieldConfigDao; - private final FieldDecoratorManger fieldDecoratorManger; - private final ComandeEventRegistry comandeEventRegistry; +// private final FieldConfigDao fieldConfigDao; +// private final FieldDecoratorManger fieldDecoratorManger; +// private final ComandeEventRegistry comandeEventRegistry; //数据下发=>重组数据存在头和尾(固定字段是否有区分下发字段下发的)=>重组=>构建业务字段内容=>计算长度=>返回完整帧 - public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { - ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); - Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); - if (ObjectUtil.isEmpty(commandConfigMap)) { - return null; - } - Map fixMap = (Map) commandConfigMap.get("fixContent"); - List> contentList = (List>) commandConfigMap.get("bizContent"); - String safeBean = String.valueOf(commandConfigMap.get("bizContent")); - preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); - bizFieldManger(replyBytes, protocolId, contentList, safeBean); - lastFixFieldManger(replyBytes, tail, protocolId, fixMap); - return replyBytes; - } - - - // 1、以起始字段解析 时间,内容解析字段 - //关于多个业务意义的键拼接为一个字节的暂不处理 - private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { - List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List preFixFieldList = fixFieldConfigList.stream() - .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); - } - - // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 - // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 - private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); - Map fieldConfigMap = fieldConfigList.stream() - .collect(Collectors.toMap(FieldConfig::getId, e -> e)); - String hexContentText = ""; - String dynamicContent = ""; - Integer dynamicBitData = 0; - try { - for (Map contentMap : contentList) { - FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); - if (ObjectUtil.isEmpty(fieldConfig)) { - String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - hexContentText += filedValue; - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); - } - } else { - hexContentText += filedValue; - } - } - } - //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 - if (!StringUtils.isEmpty(safeBean)) { - SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); - String ciphertext = safeStrategy.encryption(hexContentText); - replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); - } else { - replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); - } - } catch (DataAccessException dax) { - log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); - } - - } - - private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { - List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); - List lastFixFieldList = fieldConfigList.stream() - .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); - fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); - } - - private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { - String dynamicContent = ""; - Integer dynamicBitData = 0; - for (FieldConfig fieldConfig : fixFieldList) { - if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { - //前后没有变化,直接截取填充 - String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); - replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); - } else { - //前后发生变化,根据规则和字典表进行数据的构建 - String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), - fixMap.get(String.valueOf(fieldConfig.getId())), null); - if (fieldConfig.getOffsetUnit().equals("bit")) { - dynamicBitData += fieldConfig.getOffsetLength(); - if (dynamicBitData % 8 == 0) { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - dynamicBitData = 0; - dynamicContent = ""; - } else { - dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); - } - } else { - replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); - } - } - } - } +// public ByteBuf deliveryManger(String preBizContent, String tail, String protocolId) { +// ByteBuf replyBytes = ByteBufAllocator.DEFAULT.buffer(); +// Map commandConfigMap = comandeEventRegistry.loadComandeEventConfig(protocolId, "success_reply"); +// if (ObjectUtil.isEmpty(commandConfigMap)) { +// return null; +// } +// Map fixMap = (Map) commandConfigMap.get("fixContent"); +// List> contentList = (List>) commandConfigMap.get("bizContent"); +// String safeBean = String.valueOf(commandConfigMap.get("bizContent")); +// preFixFieldManger(replyBytes, preBizContent, protocolId, fixMap); +// bizFieldManger(replyBytes, protocolId, contentList, safeBean); +// lastFixFieldManger(replyBytes, tail, protocolId, fixMap); +// return replyBytes; +// } +// +// +// // 1、以起始字段解析 时间,内容解析字段 +// //关于多个业务意义的键拼接为一个字节的暂不处理 +// private void preFixFieldManger(ByteBuf replyBytes, String preBizContent, String protocolId, Map fixMap) { +// List fixFieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List preFixFieldList = fixFieldConfigList.stream() +// .filter(fieldConfig -> !ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, preBizContent, preFixFieldList, fixMap); +// } +// +// // 判断是不是一个整数字节,1、如果是整数字节,则进行数据的填充 +// // 2、如果不是整的字节,则需要进行数据的迭代使用,进行运算 +// private void bizFieldManger(ByteBuf replyBytes, String protocolId, List> contentList, String safeBean) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 0); +// Map fieldConfigMap = fieldConfigList.stream() +// .collect(Collectors.toMap(FieldConfig::getId, e -> e)); +// String hexContentText = ""; +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// try { +// for (Map contentMap : contentList) { +// FieldConfig fieldConfig = fieldConfigMap.get(contentMap.get("filedConfigId")); +// if (ObjectUtil.isEmpty(fieldConfig)) { +// String filedValue = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// hexContentText += filedValue; +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), contentMap.get("dictId"), dynamicContent); +// } +// } else { +// hexContentText += filedValue; +// } +// } +// } +// //取出所有的业务字段报文,在处理完之后进行判别加密操作,如果不需要加密,则直接进行明文的返回 +// if (!StringUtils.isEmpty(safeBean)) { +// SafeStrategy safeStrategy = (SafeStrategy) ApplicationContextUtil.getBean(safeBean); +// String ciphertext = safeStrategy.encryption(hexContentText); +// replyBytes.writeBytes(ciphertext.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// replyBytes.writeBytes(hexContentText.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } catch (DataAccessException dax) { +// log.error("消息回复,反构业务内容出现异常,协议id{},异常信息{}", protocolId, dax.getMessage()); +// } +// +// } +// +// private void lastFixFieldManger(ByteBuf replyBytes, String tail, String protocolId, Map fixMap) { +// List fieldConfigList = fieldConfigDao.getFieldConfigs(protocolId, 1); +// List lastFixFieldList = fieldConfigList.stream() +// .filter(fieldConfig -> ObjectUtil.isEmpty(fieldConfig.getOrignPosition())).collect(Collectors.toList()); +// fixFixedCommonManger(replyBytes, tail, lastFixFieldList, fixMap); +// } +// +// private void fixFixedCommonManger(ByteBuf replyBytes, String fixContent, List fixFieldList, Map fixMap) { +// String dynamicContent = ""; +// Integer dynamicBitData = 0; +// for (FieldConfig fieldConfig : fixFieldList) { +// if (StringUtils.isEmpty(fieldConfig.getUploadDeliveryChange())) { +// //前后没有变化,直接截取填充 +// String fieldContent = fixContent.substring(fieldConfig.getOrignPosition(), fieldConfig.getOrignPosition() + fieldConfig.getOffsetLength()); +// replyBytes.writeBytes(fieldContent.getBytes(Charset.forName("ISO-8859-1"))); +// } else { +// //前后发生变化,根据规则和字典表进行数据的构建 +// String fieldChangeContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), +// fixMap.get(String.valueOf(fieldConfig.getId())), null); +// if (fieldConfig.getOffsetUnit().equals("bit")) { +// dynamicBitData += fieldConfig.getOffsetLength(); +// if (dynamicBitData % 8 == 0) { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// dynamicBitData = 0; +// dynamicContent = ""; +// } else { +// dynamicContent = fieldDecoratorManger.contentMerge(fieldConfig.getRuleJson(), fixMap.get(String.valueOf(fieldConfig.getId())), dynamicContent); +// } +// } else { +// replyBytes.writeBytes(fieldChangeContent.getBytes(Charset.forName("ISO-8859-1"))); +// } +// } +// } +// } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java index aaf1837..a598629 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/delivery/service/impl/ComandeEventServiceImpl.java @@ -1,23 +1,16 @@ package com.casic.missiles.delivery.service.impl; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONArray; -import com.casic.missiles.delivery.Registry.ComandeEventRegistry; -import com.casic.missiles.pojo.CommandEventConfig; +import com.casic.missiles.delivery.service.ComandeEventService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; -import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Component @Slf4j @AllArgsConstructor -public class ComandeEventServiceImpl implements ComandeEventRegistry { +public class ComandeEventServiceImpl implements ComandeEventService { // private final CommandEventDao commandEventDao; // 加密bean 固定字段出现变化的字段解析,业务字段的有序内容 diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java index 9a28c36..3da433a 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/SensorhubClient.java @@ -1,8 +1,6 @@ package com.casic.missiles.netty.client; import com.casic.missiles.netty.client.handler.SensorhubClientChannelInitialHandler; -import com.casic.missiles.pojo.Msg; -import com.casic.missiles.util.MsgUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; @@ -11,13 +9,13 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioSocketChannel; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClient 客户端 */ @Slf4j -@Registry +@Component public final class SensorhubClient { public static void main(String[] args) throws Exception { @@ -37,10 +35,10 @@ ChannelFuture f = b.connect(hostName, portNumber).sync(); Channel channel = f.channel(); - channel.writeAndFlush(MsgUtil.getMsg()); - Msg msg = MsgUtil.getMsg(); - msg.setTransControlFlag(1); - channel.writeAndFlush(msg); +// channel.writeAndFlush(MsgUtil.getMsg()); +// Msg msg = MsgUtil.getMsg(); +// msg.setTransControlFlag(1); +// channel.writeAndFlush(msg); // ByteBuffer writeBuffer = ByteBuffer.allocate(32); // try (BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in))) { // String userInput; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java index 477c3f7..aaf3498 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientChannelInitialHandler.java @@ -6,12 +6,12 @@ import io.netty.channel.socket.SocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientChannelInitialHandler */ -@Registry +@Component public class SensorhubClientChannelInitialHandler extends ChannelInitializer { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java index 73560e3..9f6b75d 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/netty/client/handler/SensorhubClientHandler.java @@ -5,13 +5,13 @@ import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Registry; +import org.springframework.stereotype.Component; /** * SensorhubClientHandler */ @Slf4j -@Registry +@Component public class SensorhubClientHandler extends SimpleChannelInboundHandler { @Override diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java index 6212b00..dc1ab97 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/GenericProtocolParser.java @@ -43,7 +43,6 @@ if (protocolConfig == null) { return rematch(byteBuf); } - //暂时先取第一个, 减少类的创建销毁与构建 AbstractProtocolConfigFactory protocolFactory = new DefaultProtocolConfigFactory(protocolConfig); ByteBuf wholeDatagramByte = null; diff --git a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java index 5af9639..d19cadd 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/parser/matcher/LeadingCodeMatcher.java @@ -55,7 +55,7 @@ */ private static Boolean doMacthLeadCode(String preFix, String matchContent) { Integer preFixLength = preFix.length(); - String beMatchContent = matchContent.substring(0, preFixLength - 1); + String beMatchContent = matchContent.substring(0, preFixLength); return beMatchContent.equals(preFix); } } diff --git a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java index 97cc984..40a5265 100644 --- a/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java +++ b/sensorhub-core/src/main/java/com/casic/missiles/predecodec/impl/AepPreprocessing.java @@ -40,7 +40,7 @@ String httpContent = msg.toString(Charset.defaultCharset()); log.info(" String : " + msg.toString(Charset.defaultCharset())); String majorContent = httpContent.substring(httpContent.indexOf("{"), httpContent.lastIndexOf("}") + 1); - String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("RegistryData")).get("Value")); + String values = String.valueOf(((JSONObject) ((JSONObject) JSON.parseObject(majorContent).get("payload")).get("serviceData")).get("Value")); log.info("----------------------------------" + values); ByteBuf bufferContent = ByteBufAllocator.DEFAULT.buffer(); bufferContent.writeBytes(values.getBytes(Charset.forName("ISO-8859-1"))); diff --git a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java index 8a516e5..3d92bfe 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/registry/impl/ProtocolConfigRegistryImpl.java @@ -1,5 +1,6 @@ package com.casic.missiles.registry.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.casic.missiles.mapper.ProtocolConfigMapper; import com.casic.missiles.pojo.ProtocolConfig; @@ -18,8 +19,9 @@ */ @Override public List getProtocolConfigList(String firstChar) { - - return this.baseMapper.selectList(null); + QueryWrapper queryWrapper = new QueryWrapper() + .likeRight("pre_fix", firstChar); + return this.baseMapper.selectList(queryWrapper); } diff --git a/sensorhub-support/src/main/java/com/casic/missiles/util/AutoCodeGenerator.java b/sensorhub-support/src/main/java/com/casic/missiles/util/AutoCodeGenerator.java index d3079d1..f24d2ae 100644 --- a/sensorhub-support/src/main/java/com/casic/missiles/util/AutoCodeGenerator.java +++ b/sensorhub-support/src/main/java/com/casic/missiles/util/AutoCodeGenerator.java @@ -63,8 +63,8 @@ // 指定父包名 .parent("com.casic.missiles") .entity("model") - .Registry("Registry") - .ServiceImpl("Registry.impl") + .service("Registry") + .serviceImpl("Registry.impl") .mapper("mapper") .controller("controller")) // 模版配置