前言
之前的两篇将编解码插件的外围配置都已经交代明白,本篇将为大家讲解编解码插件的组成以及如何编写编解码插件!
ProtocolAdapterImpl 中的 encode And decode
在上一篇结尾,我们注意到一个细节,就是我们在配置文件中配置了一个路径,这个路径是一个java文件的路径,这时候我们就要注意了!这个文件一定不一般!!
这个文件就是ProtocolAdapterImpl.java,没错,事实证明这个文件就是我们的程序被调用的入口,而这个文件中有两个方法!打眼看过去我们就应该知道他们分别是干啥用的了~
encode
encode编码方法嘛!我们什么时候需要编码,按照我们前面讲的数据流向图(忘记请戳这里),当命令从应用流向设备的时候是需要从profile类型的json串转成16进制码流的,说以encode是编码方法!
decode
decode解码方法,当16进制码流从设备流向应用时应该先通过这里,将编码解码为profile中提前定义的json字符串!
具体结构
翠花~ 上码
package com.Huawei.NBIoTDevice.WaterMeter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import com.huawei.m2m.cig.tup.modules.protocol_adapter.IProtocolAdapter; public class ProtocolAdapterImpl implements IProtocolAdapter { private static final Logger logger = LoggerFactory.getLogger(ProtocolAdapterImpl.class); // 厂商名称 private static final String MANU_FACTURERID = "Huawei"; // 设备型号 private static final String MODEL = "NBIoTDevice"; @Override public String getManufacturerId() { return MANU_FACTURERID; } @Override public String getModel() { return MODEL; } public byte[] encode(ObjectNode input) throws Exception { logger.info("dynamic lrbtest " + input.toString()); try { CmdProcess cmdProcess = new CmdProcess(input); byte[] byteNode = cmdProcess.toByte(); return byteNode; } catch (Exception e) { e.printStackTrace(); return null; } } public ObjectNode decode(byte[] binaryData) throws Exception { try { ReportProcess lightProcess = new ReportProcess(binaryData); ObjectNode objectNode = lightProcess.toJsonNode(); logger.info("dynamic lrbtest " + objectNode.toString()); return objectNode; } catch (Exception e) { e.printStackTrace(); return null; } } }
看到这里我们应该是可以在decode和encode方法中任意发挥了!
但是 !!!
请注意
还有一个坑!
// 厂商名称 private static final String MANU_FACTURERID = "Huawei"; // 设备型号 private static final String MODEL = "NBIoTDevice";
MANU_FACTURERID 和 MODEL 千万不要忘记改!如果忘记改上传的时候它是不会提醒你滴!~
但是编解码编出来的东西乱七八糟!!!
如果按照正常的路数我们应该按照华为给定的结构去编写代码,如下:
即命令编码在 CmdProcess.java 类中编写,命令解码在 ReportProcess 类中编写,但是只有电信的NB平台是华为做的,如果和其他厂家兼容该怎样去做呢?欲知后事如何,且听下回分解!