|
@@ -0,0 +1,378 @@
|
|
|
|
+package com.huimv.admin.server;
|
|
|
|
+
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
+import io.netty.buffer.ByteBuf;
|
|
|
|
+import io.netty.channel.ChannelHandler;
|
|
|
|
+import io.netty.channel.ChannelHandlerContext;
|
|
|
|
+import io.netty.channel.ChannelInboundHandlerAdapter;
|
|
|
|
+import io.netty.util.CharsetUtil;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
|
+
|
|
|
|
+import java.io.IOException;
|
|
|
|
+import java.text.ParseException;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.Map;
|
|
|
|
+import java.util.regex.Matcher;
|
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * @Project : huimv.shiwan
|
|
|
|
+ * @Package : com.huimv.biosafety.uface.controller
|
|
|
|
+ * @Description : TODO
|
|
|
|
+ * @Version : 1.0
|
|
|
|
+ * @Author : ZhuoNing
|
|
|
|
+ * @Create : 2020-12-25
|
|
|
|
+ **/
|
|
|
|
+@ChannelHandler.Sharable
|
|
|
|
+@Component
|
|
|
|
+@Slf4j
|
|
|
|
+public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
|
|
|
|
+ private StringBuilder askTextSb = null;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ public void appendClientAsk(String text) {
|
|
|
|
+ if (this.askTextSb == null) {
|
|
|
|
+ askTextSb = new StringBuilder();
|
|
|
|
+ }
|
|
|
|
+ askTextSb.append(text);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
|
|
|
|
+ ByteBuf data = (ByteBuf) msg;
|
|
|
|
+ String clientAskText = data.toString(CharsetUtil.UTF_8);
|
|
|
|
+ //保存实例内的客户端请求
|
|
|
|
+ appendClientAsk(clientAskText);
|
|
|
|
+ //临时写入耳标数据到文件
|
|
|
|
+// writeTxt(clientAskText,"all");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
|
|
|
|
+// if (askTextSb.toString().indexOf("end") != -1) {
|
|
|
|
+ // {处理客户端消息}
|
|
|
|
+ handleClientAskCmd(askTextSb.toString(), ctx);
|
|
|
|
+ //清空重置;
|
|
|
|
+ askTextSb.delete(0, askTextSb.length());
|
|
|
|
+// }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
|
|
|
|
+ if (cause.getMessage().indexOf("Connection reset") != -1) {
|
|
|
|
+ log.info("相关采集器设备正在重启:" + cause.toString());
|
|
|
|
+ }
|
|
|
|
+// cause.printStackTrace();
|
|
|
|
+ ctx.close();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @Method : handleClientAskCmd
|
|
|
|
+ * @Description : 处理请求小心
|
|
|
|
+ * @Params : [clientAskText, ctx]
|
|
|
|
+ * @Return : void
|
|
|
|
+ * @Author : ZhuoNing
|
|
|
|
+ * @Date : 2022/3/28
|
|
|
|
+ * @Time : 17:36
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private void handleClientAskCmd(String clientAskText, ChannelHandlerContext ctx) throws ParseException, IOException {
|
|
|
|
+
|
|
|
|
+ System.out.println("接收到消息: " + clientAskText + " 时间: " + System.currentTimeMillis());
|
|
|
|
+
|
|
|
|
+ askTextSb.delete(0, askTextSb.length());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * @Method : askCmdActuator
|
|
|
|
+ * @Description :
|
|
|
|
+ * @Params : [askText, ctx]
|
|
|
|
+ * @Return : void
|
|
|
|
+ * @Author : ZhuoNing
|
|
|
|
+ * @Date : 2022/3/23
|
|
|
|
+ * @Time : 18:08
|
|
|
|
+ */
|
|
|
|
+ private void askCmdActuator(String askText, ChannelHandlerContext ctx) throws ParseException, IOException {
|
|
|
|
+ System.out.println("======>接收设备请求:" + askText);
|
|
|
|
+ String[] dataArray = askText.split("\\+");
|
|
|
|
+ String cmdHeader = dataArray[0];
|
|
|
|
+ if (!cmdHeader.trim().equalsIgnoreCase("hm")) {
|
|
|
|
+ log.info("当前命令是非hm命令[" + askText + "]");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ //芯片id/设备编码
|
|
|
|
+ String idCode = dataArray[1];
|
|
|
|
+ String cmd = dataArray[2];
|
|
|
|
+ Map map = new HashMap();
|
|
|
|
+ map.put("askText", askText);
|
|
|
|
+// rawDataService.insert(idCode,askText);
|
|
|
|
+ switch (cmd) {
|
|
|
|
+// case "1":
|
|
|
|
+// //获取远程设备编码
|
|
|
|
+// getDeviceCode(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "2":
|
|
|
|
+// //同步时间
|
|
|
|
+// getServerTime(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "3":
|
|
|
|
+// //日龄上传
|
|
|
|
+// uploadDayAge(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "4":
|
|
|
|
+// //通风等级
|
|
|
|
+// uploadFeng(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "5":
|
|
|
|
+// //室外温度
|
|
|
|
+// uploadOutTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "6":
|
|
|
|
+// //室内温度 平均温度
|
|
|
|
+// uploadInTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "7":
|
|
|
|
+// //目标温度
|
|
|
|
+// uploadTargetnTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "8":
|
|
|
|
+// //水暖温度
|
|
|
|
+// uploadShuiNuanTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "9":
|
|
|
|
+// //水暖温度
|
|
|
|
+// uploadWeiZhiTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "21":
|
|
|
|
+// //温度
|
|
|
|
+// uploadTemp(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "22":
|
|
|
|
+// //湿度
|
|
|
|
+// uploadHumi(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "23":
|
|
|
|
+// //co2
|
|
|
|
+// uploadCo2(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "24":
|
|
|
|
+// //压力
|
|
|
|
+// uploadYaLi(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "31":
|
|
|
|
+// //水表
|
|
|
|
+// uploadShuiBiao(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "32":
|
|
|
|
+// //电表
|
|
|
|
+// uploadDianBiao(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "41":
|
|
|
|
+// //报警
|
|
|
|
+// uploadWarning(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "42":
|
|
|
|
+// //报警
|
|
|
|
+// uploadStatusWaraning(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "61":
|
|
|
|
+// //风机状态
|
|
|
|
+// uploadFengStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "62":
|
|
|
|
+// //湿帘状态
|
|
|
|
+// uploadShiLianStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "63":
|
|
|
|
+// //喷雾状态
|
|
|
|
+// uploadPengWuStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "64":
|
|
|
|
+// //加热器状态
|
|
|
|
+// uploadJiaReQiStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "65":
|
|
|
|
+// //小窗状态
|
|
|
|
+// uploadXiaoChuangStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "66":
|
|
|
|
+// //导流板状态
|
|
|
|
+// uploadDaoLiuBanStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "67":
|
|
|
|
+// //照明状态
|
|
|
|
+// uploadZhaoMingStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "81":
|
|
|
|
+// //日龄配置
|
|
|
|
+// uploadDayAgePeizhiuStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "82":
|
|
|
|
+// //通风级别配置
|
|
|
|
+// uploadTongFengPeizhiuStatus(askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "91":
|
|
|
|
+// //通获取日龄配置
|
|
|
|
+// uploadGainDayAgePeizhiuStatus(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// case "92":
|
|
|
|
+// //通风级别配置
|
|
|
|
+// uploadGainTongFengPeizhiuStatus(dataArray,askText, idCode, ctx);
|
|
|
|
+// break;
|
|
|
|
+// default:
|
|
|
|
+// System.out.println("==>未知命令");
|
|
|
|
+// log.error(">>当前数据为非法数据-未知命令>>" + askText);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+//
|
|
|
|
+// private void uploadZhaoMingStatus(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#照明状态上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+67+0+4+end";
|
|
|
|
+// log.info(">>照明状态上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// producer.sendZhaoMingStatus(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadDaoLiuBanStatus(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#导流板状态上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+66+0+4+end";
|
|
|
|
+// log.info(">>导流板状态上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// producer.sendDaoLiuStatus(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadXiaoChuangStatus(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#小窗状态上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+65+0+4+end";
|
|
|
|
+// log.info(">>小窗状态上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendXiaoChuangStatus(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadJiaReQiStatus(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#加热状态上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+64+0+4+end";
|
|
|
|
+// log.info(">>加热温度上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendJiaReStatus(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadDianBiao(String[] dataArray, String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#电表上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+32+0+4+end";
|
|
|
|
+// log.info(">>电表上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendDianBiaoData(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadShuiBiao(String[] dataArray, String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("#水表上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+31+0+4+end";
|
|
|
|
+// log.info(">>水表温度上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendShuiBiaoData(askText);
|
|
|
|
+// }
|
|
|
|
+// private void uploadWeiZhiTemp(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("##位置温度上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+9+0+4+end";
|
|
|
|
+// log.info(">>位置温度上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendWeiZhi(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadShuiNuanTemp(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+//
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("##水暖上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+8+0+4+end";
|
|
|
|
+// log.info(">>水暖上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendShuiNuan(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadStatusWaraning(String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("##状态报警上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+42+0+2+end";
|
|
|
|
+// log.info(">>状态报警上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendWarning(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadYaLi(String[] dataArray, String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("##压力 上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// String answerText = "hm+24+0+8+end";
|
|
|
|
+// log.info(">>压力 等级上传请求-应答数据>>" + answerText);
|
|
|
|
+// answerCmd(answerText, ctx);
|
|
|
|
+// //发送湿度请求到消息队列
|
|
|
|
+// producer.sendYaLi(askText);
|
|
|
|
+// }
|
|
|
|
+//
|
|
|
|
+// private void uploadCo2(String[] dataArray, String askText, String idCode, ChannelHandlerContext ctx) {
|
|
|
|
+// if (!cmdProService.isEffectiveDevice(idCode)) {
|
|
|
|
+// System.out.println("##CO2 上传请求-未注册设备 idCode=" + idCode);
|
|
|
|
+// return;
|
|
|
|
+// }
|
|
|
|
+// //TODO
|
|
|
|
+// String answerText = "hm+23+0+8+end";
|
|
|
|
+
|
|
|
|
+// //拆分粘包数据
|
|
|
|
+ public JSONArray parseAskCmdPackage(String text) {
|
|
|
|
+ String key = "end";
|
|
|
|
+ Pattern pattern = Pattern.compile(key);
|
|
|
|
+ Matcher matcher = pattern.matcher(text);
|
|
|
|
+ int count = 0;
|
|
|
|
+ while (matcher.find()) {
|
|
|
|
+ count++;
|
|
|
|
+ }
|
|
|
|
+ JSONArray dataJa = new JSONArray();
|
|
|
|
+ if (count == 1) {
|
|
|
|
+ dataJa.add(text);
|
|
|
|
+ } else {
|
|
|
|
+ for (int a = 0; a < count; a++) {
|
|
|
|
+ int p1 = text.indexOf("end");
|
|
|
|
+ dataJa.add(text.substring(0, p1 + 3));
|
|
|
|
+ text = text.substring(p1 + 3, text.length());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return dataJa;
|
|
|
|
+ }
|
|
|
|
+}
|