From a102f1bc01a43ac59db4e0ad9b831d55ed80bb0f Mon Sep 17 00:00:00 2001 From: lijw Date: Fri, 21 Mar 2025 10:40:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=97=A5=E5=BF=97=E6=89=93?= =?UTF-8?q?=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ClientController.java | 5 +- .../inspect/tcpserver/tcp/DownXml2Json.java | 6 +- .../com/inspect/tcpserver/tcp/MyDecoder.java | 5 +- .../inspect/tcpserver/tcp/NettyClient.java | 43 ++++--- .../inspect/tcpserver/tcp/NettyServer.java | 118 +++++++++--------- .../tcpserver/tcp/NettyServerHandler.java | 8 +- .../com/inspect/tcpserver/tcp/UpJson2Xml.java | 4 +- 7 files changed, 97 insertions(+), 92 deletions(-) diff --git a/src/main/java/com/inspect/tcpserver/controller/ClientController.java b/src/main/java/com/inspect/tcpserver/controller/ClientController.java index 26a8d37..39bac37 100644 --- a/src/main/java/com/inspect/tcpserver/controller/ClientController.java +++ b/src/main/java/com/inspect/tcpserver/controller/ClientController.java @@ -3,6 +3,7 @@ package com.inspect.tcpserver.controller; import com.alibaba.fastjson.JSONObject; import com.inspect.tcpserver.domain.AjaxResult; import com.inspect.tcpserver.tcp.NettyClient; +import com.inspect.tcpserver.util.Color; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.slf4j.Logger; @@ -49,14 +50,14 @@ public class ClientController { return AjaxResult.fail("500", "消息JSON解析失败"); } - logger.info("######## 会话: {}, 巡视主机客户端接收到消息, 发送到上级 ########\n{}", uuid, msg); msg = msg.replaceAll("sendCode", "SendCode"); msg = msg.replaceAll("receiveCode", "ReceiveCode"); msg = msg.replaceAll("type", "Type"); + //logger.info("###### 会话:{}, 巡视主机客户端接收到消息, 发送到上级 ######\n{}", uuid, msg); //nettyClient.sendJsonMessage(uuid, msg); return AjaxResult.success(); } catch (Exception e) { - logger.error("######## 会话: {}, 客户端发送消息捕获异常: {} ########", uuid, e.getMessage()); + logger.error(Color.RED + "###### 会话:{}, 客户端发送消息捕获异常:{} ######" + Color.END, uuid, e.getMessage()); return AjaxResult.fail(500, "数据格式不正确"); } } diff --git a/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java b/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java index 8175e42..e76825c 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java +++ b/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java @@ -1,6 +1,7 @@ package com.inspect.tcpserver.tcp; import com.alibaba.fastjson.JSON; +import com.inspect.tcpserver.util.Color; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.naming.NoNameCoder; import com.thoughtworks.xstream.io.xml.Xpp3Driver; @@ -36,7 +37,6 @@ public class DownXml2Json { T obj = (T) xStream.fromXML(xml); return JSON.toJSONString(obj); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## 会话: {}, 客户: {}, UP解析失败, 异常堆栈 [PatrolHost] {} ########", uuid, id, e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.alias(deviceAlias, clazz); @@ -46,7 +46,7 @@ public class DownXml2Json { T obj = (T) xStream.fromXML(xml); return JSON.toJSONString(obj); } catch (com.thoughtworks.xstream.XStreamException ex) { - logger.error("######## 客户: {}, DOWN解析失败[PatrolDevice] {} ########", id, e.getMessage()); + logger.error(Color.RED + "###### 客户:{}, DownStreamJson2Xml解析失败:{} ######" + Color.END, id, e.getMessage()); return null; } } @@ -224,7 +224,7 @@ public class DownXml2Json { public String AlarmControlXml2Json(String xml) { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); //xStream.alias(alias, AlarmControl.class); - logger.info("[XML] AlarmControlXml2Json alias: {}", alias); + logger.info("[XML] AlarmControlXml2Json alias:{}", alias); xStream.alias(alias, AlarmControl.class); xStream.autodetectAnnotations(true); xStream.ignoreUnknownElements(); diff --git a/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java b/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java index b6146cd..a68b284 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java +++ b/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java @@ -1,5 +1,6 @@ package com.inspect.tcpserver.tcp; +import com.inspect.tcpserver.util.Color; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufUtil; import io.netty.buffer.Unpooled; @@ -30,7 +31,7 @@ public class MyDecoder extends ByteToMessageDecoder { final String uuid = RandomStringUtils.randomAlphanumeric(16); // ByteBuf forPrint = in.copy(); -// log.info("######## 会话: {}, 客户: {}, 上行原始报文 ######## \n {}", uuid, ctx.channel().id().asShortText(), ByteBufUtil.hexDump(forPrint)); +// log.info("###### 会话:{}, 客户:{}, 上行原始报文 ######\n {}", uuid, ctx.channel().id().asShortText(), ByteBufUtil.hexDump(forPrint)); int index; String flag; @@ -60,6 +61,8 @@ public class MyDecoder extends ByteToMessageDecoder { in.readBytes(payload); if(in.readableBytes() > 0) { in.readShortLE(); + } else { + log.warn(Color.RED + "###### readShortLE() but readableBytes = 0 ######" + Color.END); } BinaryModel binaryModel = new BinaryModel(); binaryModel.receiveIndex = receiveIndex; diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java b/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java index 52cd324..9dad0a1 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java @@ -156,7 +156,7 @@ public class NettyClient { client.sendMsg(allBuf); this.sendIndex++; } else { - logger.warn("######## 会话: {}, 与上级系统连接失败 ########", uuid); + logger.warn("###### 会话:{}, 与上级系统连接失败 ######", uuid); } } @@ -213,7 +213,7 @@ public class NettyClient { String response = ""; String json = null; - logger.info("######## 收到上级系统消息:{}, 类型: {} ########\n{}", binaryModel.id, type, xml); + logger.info("###### 收到上级系统消息:{}, 类型:{} ######\n{}", binaryModel.id, type, xml); switch (type) { case SystemType.system: switch (command) { @@ -267,7 +267,7 @@ public class NettyClient { json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ResultControl.class); break; default: - logger.warn("client-handle-接收到的type:{},不在处理范围内,不予处理", type); + logger.warn("ClienHandler接收到的type:{}不在处理范围内, 不予处理", type); } // 将上级下发的指令,转发到业务端处理,接收业务端处理后的结果,上报给上级系统 @@ -327,7 +327,6 @@ public class NettyClient { xStream.addPermission(AnyTypePermission.ANY); obj = (RegisterResponseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## 注册解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = getXmlStreamInstance(); xStream.alias(deviceAlias, RegisterResponseControl.class); @@ -336,12 +335,12 @@ public class NettyClient { xStream.addPermission(AnyTypePermission.ANY); obj = (RegisterResponseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("######## 解析失败[PatrolDevice] {} ########", e2.getMessage()); + logger.error("###### dealRegister解析失败:{} ######", e2.getMessage()); } } TimerSendControl(obj); - logger.info("######## 客户端 接收到服务端注册回馈, 服务注册完成 ########"); + logger.info("###### 客户端接收到服务端注册回馈, 服务注册完成 ######"); } //处理心跳 @@ -493,81 +492,81 @@ public class NettyClient { case PushType.environment: // xml = upJson2Xml.EnvironmentControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, EnvironmentControl.class); - logger.info("######## 会话: {}, 向上级系统发送环境数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送环境数据 ######\n{}", uuid, xml); break; case PushType.alarm: // xml = upJson2Xml.AlarmControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, AlarmControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视设备异常告警数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视设备异常告警数据 ######\n{}", uuid, xml); break; case PushType.analysisAlarm: // xml = upJson2Xml.AnalysisControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, AnalysisControl.class); - logger.info("######## 会话: {}, 向上级系统发送告警数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送告警数据 ######\n{}", uuid, xml); break; case PushType.location: // xml = upJson2Xml.LocationControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, LocationControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视设备坐标 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视设备坐标 ######\n{}", uuid, xml); break; case PushType.monitor: // xml = upJson2Xml.MonitorControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, MonitorControl.class); - logger.info("######## 会话: {}, 向上级系统发送静默监视告警数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送静默监视告警数据 ######\n{}", uuid, xml); break; case PushType.nestRunning: // xml = upJson2Xml.NestRunningJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, NestRunningControl.class); - logger.info("######## 会话: {}, 向上级系统发送无人机机巢运行数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送无人机机巢运行数据 ######\n{}", uuid, xml); break; case PushType.nestState: // xml = upJson2Xml.NestStateJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, NestStateControl.class); - logger.info("######## 会话: {}, 向上级系统发送无人机机巢状态数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送无人机机巢状态数据 ######\n{}", uuid, xml); break; case PushType.patrolDeviceState: // xml = upJson2Xml.PatrolDeviceStateControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceStateControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视设备状态数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视设备状态数据 ######\n{}", uuid, xml); break; case PushType.patrolDeviceRunning: // xml = upJson2Xml.PatrolDeviceRunningControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceRunningControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视设备运行数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视设备运行数据 ######\n{}", uuid, xml); break; case PushType.result: // xml = upJson2Xml.TaskResultControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, TaskResultControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视结果 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视结果 ######\n{}", uuid, xml); break; case PushType.taskState: // xml = upJson2Xml.TaskStateControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, TaskStateControl.class); - logger.info("######## 会话: {}, 向上级系统发送任务状态数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送任务状态数据 ######\n{}", uuid, xml); break; case PushType.total: // xml = upJson2Xml.ReportControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, ReportControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视设备统计信息上报 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视设备统计信息上报 ######\n{}", uuid, xml); break; case PushType.route: // xml = upJson2Xml.RouteControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, RouteControl.class); - logger.info("######## 会话: {}, 向上级系统发送巡视路线 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送巡视路线 ######\n{}", uuid, xml); break; case SystemType.system: // xml = upJson2Xml.ModelJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, ModelControl.class); - logger.info("######## 会话: {}, 向上级系统发送系统数据 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送系统数据 ######\n{}", uuid, xml); break; case ModelType.modelUpdate: // xml = upJson2Xml.UpdateModelJson2Xml(json); //xml = up.ModelJson2Xml(json, UpdateModelControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, UpdateModelControl.class); - logger.info("######## 会话: {}, 向上级系统发送模型更新上报指令 ########\n{}", uuid, xml); + logger.info("###### 会话:{}, 向上级系统发送模型更新上报指令 ######\n{}", uuid, xml); break; default: - logger.warn("######## 会话: {}, 应用向上级系统发送消息, 类型: [{}] 不在处理范围内, 不予处理 ########", uuid, type); + logger.warn("###### 会话:{}, 应用向上级系统发送消息, 类型: [{}] 不在处理范围内, 不予处理 ######", uuid, type); } if (!StringUtils.isEmpty(xml)) { // 将设备别名转换为上级别名 diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java b/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java index 3f2a2ff..a674b00 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java @@ -121,7 +121,7 @@ public class NettyServer { //绑定端口,开始接收进来的连接 try { ChannelFuture future = bootstrap.bind(serverPort).sync(); - logger.info("################ TCP服务器启动 ################"); + logger.info("###### TCP服务器启动 ######"); future.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); @@ -140,11 +140,16 @@ public class NettyServer { } } + private String compact(String xml) { + String compactXml = xml + .replaceAll(">\\s+<", "><") // 处理标签间的空白 + .replaceAll("\\s+", " "); // 压缩连续空格(可选) + return compactXml; + } + //发送消息 public void flushMsgToDevice(String uuid, String clientKey, boolean request, String xml) { - logger.info("clientKey: " + clientKey + ", tcpClientMap.size(): " + tcpClientMap.size() + ", tcpClientMap: " + tcpClientMap); - - if (tcpClientMap.containsKey(clientKey) && !StringUtil.isNullOrEmpty(xml)) { + if (tcpClientMap.containsKey(clientKey)) { ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); int length = byteBuf.readableBytes(); ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength); @@ -158,17 +163,16 @@ public class NettyServer { allBuf.writeByte(0xEB); allBuf.writeByte(0x90); redisTemplate.opsForValue().set(String.valueOf(sendIndex), allBuf.toString(CharsetUtil.US_ASCII), 60L, TimeUnit.SECONDS); - logger.info(Color.MAGENTA + "######## => 会话:{}, 客户:{}, 向设备回送序列:{}, 接收端序列:{}, 消息########\n{}" + Color.END, uuid, tcpClientMap.get(clientKey), sendIndex, receiveIndex, xml); + logger.info(Color.MAGENTA + "###### 会话:{}, 客户:[{}/{}], 向设备回送序列:{}, 接收端序列:{}, 消息: ######\n{}" + Color.END, uuid, clientKey, tcpClientMap.get(clientKey), sendIndex, receiveIndex, compact(xml)); nettyServerHandler.sendMsg(uuid, clientKey, tcpClientMap.get(clientKey), allBuf); sendIndex++; } else { - logger.warn(Color.RED + "######## 会话: {}, 客户: [{}/{}] 离线!!! ########" + Color.END, uuid, tcpClientMap.get(clientKey), clientKey); + logger.warn(Color.RED + "###### 会话:{}, 客户:[{}/{}] 离线!!! ######" + Color.END, uuid, clientKey, tcpClientMap.get(clientKey)); } } public void flushMsgToDeviceBroadcast(String uuid, String clientKey, boolean request, String xml) { for (Map.Entry entry : tcpClientMap.entrySet()) { - logger.info("######## flushMsgToDeviceBroadcast key: {}, value: {} ########", entry.getKey(), entry.getValue()); ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); int length = byteBuf.readableBytes(); ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength); @@ -182,7 +186,7 @@ public class NettyServer { allBuf.writeByte(0xEB); allBuf.writeByte(0x90); redisTemplate.opsForValue().set(String.valueOf(sendIndex), allBuf.toString(CharsetUtil.US_ASCII), 60L, TimeUnit.SECONDS); - logger.info(Color.MAGENTA + "######## => 会话:{}, 客户:{}, 向设备回送序列:{}, 接收端序列:{}, 消息########\n{}" + Color.END, uuid, tcpClientMap.get(clientKey), sendIndex, receiveIndex, xml); + logger.info(Color.MAGENTA + "###### 会话:{}, 客户:[{}/{}], 向设备回送序列:{}, 接收端序列:{}, 消息: ######\n{}" + Color.END, uuid, clientKey, tcpClientMap.get(clientKey), sendIndex, receiveIndex, compact(xml)); nettyServerHandler.sendMsg(uuid, entry.getKey(), tcpClientMap.get(entry.getKey()), allBuf); sendIndex++; try { @@ -231,7 +235,8 @@ public class NettyServer { command = Integer.parseInt(root.element("Command").getText()); } - logger.info(Color.MAGENTA + "######## <= 会话: {}, 客户: [{}/{}], 消息类型: {}, 命令:{}, 消息体: ########\n{}" + Color.END, binaryModel.uuid, sendCode, binaryModel.id, type, command, xml); + String compactXml = compact(xml); + logger.info(Color.YELLOW + "###### 会话:{}, 客户:[{}/{}], 消息类型:{}, 命令:{}, 消息体: ######\n{}" + Color.END, binaryModel.uuid, sendCode, binaryModel.id, type, command, compactXml); //判断是否重发 if (type == SystemType.system) { if (command == SystemType.has_response || command == SystemType.no_response) { @@ -241,12 +246,15 @@ public class NettyServer { resetSendMsg(binaryModel.receiveIndex, sendCode); return; } else if (code.equals(ResponseType.succeed)) { - logger.info("######## 响应结果为成功, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml); + logger.info(Color.YELLOW + "###### 响应结果为成功 ######" + Color.END); + if(command == SystemType.no_response) { + return; + } } else if (code.equals(ResponseType.fault)) { - logger.warn("######## 响应结果为失败, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml); + logger.warn(Color.RED + "###### 响应结果为失败 ######" + Color.END); return; } else if (code.equals(ResponseType.reject)) { - logger.warn("######## 响应结果为拒绝, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml); + logger.warn(Color.RED + "###### 响应结果为拒绝 ######" + Color.END); return; } } @@ -258,13 +266,13 @@ public class NettyServer { switch (command) { case SystemType.register_request: // 收到接入侧注册信息 - logger.info("######## 会话: {}, 客户: {}, 客户端注册信息 ########", binaryModel.uuid, sendCode); - dealRegister(binaryModel.uuid, xml); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]注册 ######" + Color.END, sendCode, binaryModel.id); + dealRegister(binaryModel.uuid, compactXml); break; case SystemType.heart_request: // 处理心跳请求响应 - logger.info("######## 会话: {}, 客户: {}, 客户端心跳 ########", binaryModel.uuid, sendCode); - sendHeartBeat(binaryModel.uuid, xml); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]心跳 ######" + Color.END, sendCode, binaryModel.id); + sendHeartBeat(binaryModel.uuid, compactXml); break; case SystemType.has_response: // 处理有返回值的消息响应 @@ -272,9 +280,9 @@ public class NettyServer { // 处理设备上报的模型同步响应 if (null != root.element("Items").element("Item").attribute("device_file_path")) { // 收到接入侧模型同步数据 - logger.info(Color.YELLOW + "######## 会话: {}, 客户: {}, 客户端模型同步数据 ########" + Color.END, binaryModel.uuid, sendCode); + logger.info(Color.YELLOW + "###### 模型同步响应数据 ######" + Color.END); // json = downXml2Json.ModelControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ModelControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, ModelControl.class); JSONObject jsonObject = JSONObject.parseObject(json); jsonObject.put("uuid", binaryModel.uuid); jsonObject.put("Type", Constant.MODEL_UP_TYPE); @@ -283,81 +291,81 @@ public class NettyServer { // 任务控制响应任务执行ID if (null != root.element("Items").element("Item").attribute("task_patrolled_id")) { // 收到接入侧任务下发或控制回复数据 - logger.info("######## 会话: {}, 客户: {}, 设备端任务下发或控制回复数据 ########", binaryModel.uuid, sendCode); + logger.info(Color.YELLOW + "###### 任务下发响应数据 ######" + Color.END); // json = downXml2Json.ModelControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ModelControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, ModelControl.class); JSONObject jsonObject = JSONObject.parseObject(json); jsonObject.put("SendCode", ""); clientController.sendMsg(binaryModel.uuid, jsonObject.toJSONString()); } } else { // 接收到的系统类信息报文中,root:{},中不包含items或items中没有item,不予处理 - logger.warn("[NETTY] IN RECEIVING MESSAGE, no items or item , OMIT IT, ROOT: {}", root); + logger.warn(Color.RED + "###### 响应数据没有items ######" + Color.END); } break; default: // 接收到的系统类信息报文中,command:{},不在处理范围内,不予处理 - logger.warn("######## 非法的消息不予处理, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml); + logger.warn(Color.RED + "###### 非法的消息不予处理 ######" + Color.END); } break; case PushType.patrolDeviceState:// insert into basedata_mont_patdevstadata // json = downXml2Json.PatrolDeviceStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, PatrolDeviceStateControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备状态数据 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, PatrolDeviceStateControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备状态数据 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.patrolDeviceRunning:// insert into basedata_mont_patdevrundata // json = downXml2Json.PatrolDeviceRunningControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, PatrolDeviceRunningControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备运行数据 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, PatrolDeviceRunningControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备运行数据 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.nestState:// insert into basedata_mont_neststadata // json = downXml2Json.NestStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, NestStateControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端机巢状态数据 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, NestStateControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]机巢状态数据 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.nestRunning:// insert into basedata_mont_nestrundata // json = downXml2Json.NestRunningControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, NestRunningControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端机巢运行数据 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, NestRunningControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]机巢运行数据 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.location:// insert into basedata_mont_patdevcoord // json = downXml2Json.LocationControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, LocationControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备坐标 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, LocationControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备坐标 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.route:// insert into basedata_mont_patdevpatroute // json = downXml2Json.RouteControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, RouteControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备路线 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, RouteControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备路线 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.alarm:// insert into basedata_mont_patdevalmabn // json = down.AlarmControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, AlarmControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备异常告警 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, AlarmControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备异常告警 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.environment:// insert into basedata_mont_evndata // json = downXml2Json.EnvironmentControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, EnvironmentControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备上报环境数据 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, EnvironmentControl.class); + logger.info(Color.YELLOW + "###### 客户端[{}/{}]设备上报环境数据 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.taskState:// insert into basedata_mont_taskstadata and patrol_task_status // json = downXml2Json.TaskStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, TaskStateControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端设备任务状态 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, TaskStateControl.class); + logger.info(Color.YELLOW + "###### 客户端{}/{}]设备任务状态 ######" + Color.END, sendCode, binaryModel.id); break; case PushType.result:// insert into basedata_mont_taskresult and patrol_task_result_main // json = downXml2Json.TaskResultControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, TaskResultControl.class); - logger.info("######## 会话: {}, 客户: {}, 客户端巡视结果 ########", binaryModel.uuid, sendCode); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, compactXml, TaskResultControl.class); + logger.info(Color.YELLOW + "###### 客户端{}/{}]巡视结果 ######" + Color.END, sendCode, binaryModel.id); break; default: // server-handle-接收到的type:{},不在处理范围内,不予处理 - logger.info("######## 会话: {}, 客户: {}, 非法的消息不予处理, 类型{}, 消息体 ########\n{}", binaryModel.uuid, sendCode, type, xml); + logger.info(Color.RED + "###### 非法的消息不予处理 ######" + Color.END); } if (type != SystemType.system && !StringUtil.isNullOrEmpty(json)) { if ((type == NestCtlType.courseReversal && command == 3)) { // 处理用SSCOM模拟的数据, 向无人机发送控制指令 - logger.info("######## 会话: {}, 客户: {}, 向设备透传200001控制指令", binaryModel.uuid, sendCode); - flushMsgToDeviceBroadcast(binaryModel.uuid, receiveCode, false, xml); + logger.info("###### 客户:{}, 向设备透传200001控制指令 ######", sendCode); + flushMsgToDeviceBroadcast(binaryModel.uuid, receiveCode, false, compactXml); } else { //rabbitmq推送到消息队列中基于springboot_xggd JSONObject jsonObject = JSONObject.parseObject(json); @@ -366,7 +374,6 @@ public class NettyServer { // send to BasedataMontDataMqAcceptHandle rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json); boolean isHost = json.contains(aliasHost); - logger.info("######## 会话: {}, 客户: {}, isHost: {}", binaryModel.uuid, sendCode, isHost); sendResponseToDevice(binaryModel.uuid, receiveCode, sendCode, isHost); } } else { @@ -374,11 +381,10 @@ public class NettyServer { || (type == NestCtlType.ptzPitch && command == 6) || (type == NestCtlType.picModelSet && command == 1) || (type == NestCtlType.nestSuddenStop && command == 2)) {// 处理用SSCOM模拟的数据, 向无人机发送控制指令 - logger.info("######## 会话: {}, 客户: {}, 向设备透传200002~20005控制指令", binaryModel.uuid, sendCode); - flushMsgToDeviceBroadcast(binaryModel.uuid, receiveCode, false, xml); + logger.info("###### 客户:{}, 向设备透传200002~20005控制指令 ######", sendCode); + flushMsgToDeviceBroadcast(binaryModel.uuid, receiveCode, false, compactXml); } } - } public void sendResponseToDevice(String uuid, String sendCode, String receiveCode, boolean isHost) { @@ -408,7 +414,6 @@ public class NettyServer { xStream.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## 注册异常堆栈[PatrolHost] 会话: {}, {} ########", uuid, e.getMessage()); try { XStream xStreamEx = getXmlStreamInstance(); xStreamEx.alias(aliasDevice, BaseControl.class); @@ -417,7 +422,7 @@ public class NettyServer { xStreamEx.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStreamEx.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("######## 解析失败[PatrolDevice] {} ########", e2.getMessage()); + logger.error(Color.RED + "###### dealRegister解析失败:{} ######" + Color.END, e2.getMessage()); } } @@ -501,21 +506,19 @@ public class NettyServer { xStream.autodetectAnnotations(true); xml = xStream.toXML(responseControl); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## DOWN REGISTER 解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.alias(aliasDevice, RegisterResponseControl.class); xStream.autodetectAnnotations(true); xml = xStream.toXML(responseControl); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("################ DOWN REGISTER 解析失败[PatrolDevice] {} ################", e2.getMessage()); + logger.error(Color.RED + "###### sendRegisterResponse解析失败:{} ######" + Color.END, e2.getMessage()); } } flushMsgToDevice(uuid, sendCode, false, xml); } public void sendHeartBeat(final String uuid, String xml) { - logger.info("################ 设备端机器人系统心跳消息 ################\n{}", xml); boolean isHost = true; BaseControl obj = new BaseControl(); try { @@ -526,7 +529,6 @@ public class NettyServer { xStream.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## HEARTBEAT TO MQ 解析失败, 异常堆栈[PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.alias(aliasDevice, BaseControl.class); @@ -536,7 +538,7 @@ public class NettyServer { obj = (BaseControl) xStream.fromXML(xml); isHost = false; } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("######## HEARTBEAT TO MQ 解析失败[PatrolDevice] {} ########", e2.getMessage()); + logger.error(Color.RED + "###### sendHeartBeat解析失败:{} ######" + Color.END, e2.getMessage()); } } @@ -605,11 +607,11 @@ public class NettyServer { xml = upJson2Xml.UpStreamJson2Xml(json, LinkageTaskControl.class); break; default: - logger.warn("################ 向设备端下发命令, 类型:{}错误, 不予处理 ################", type); + logger.warn(Color.RED + "###### 向设备端下发命令, 类型:{}错误, 不予处理 ######" + Color.END, type); } if (!StringUtils.isEmpty(xml)) { - //logger.info("################ 向设备端下发命令 ################\n{}", xml); + //logger.info("###### 向设备端下发命令 ######\n{}", xml); flushMsgToDevice("", receiveCode, true, xml); } } diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java b/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java index 3f7ece6..a3cc180 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java @@ -23,7 +23,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { public void sendMsg(String uuid, String clientKey, String clientValue, ByteBuf byteBuf) { if (ids.containsKey(clientValue)) { // ByteBuf forPrint = byteBuf.copy(); -// logger.info("######## 会话: {}, 客户键值: {}, 客户号: {}, 下行原始报文 ########\n [{}]", uuid, clientKey, clientValue, ByteBufUtil.hexDump(forPrint)); +// logger.info("###### 会话:{}, 客户键值:{}, 客户号:{}, 下行原始报文 ######\n [{}]", uuid, clientKey, clientValue, ByteBufUtil.hexDump(forPrint)); ids.get(clientValue).writeAndFlush(byteBuf); } } @@ -35,7 +35,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { public void channelActive(ChannelHandlerContext ctx) throws Exception { String id = ctx.channel().id().asShortText(); ids.put(id, ctx); - logger.info("######## 设备上线: {} ########", id); + logger.info("###### 设备上线:{} ######", id); } /** @@ -45,7 +45,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { public void channelInactive(ChannelHandlerContext ctx) throws Exception { ctx.close(); String id = ctx.channel().id().asShortText(); - logger.warn("######## 设备断开: {} ########", id); + logger.warn("###### 设备断开:{} ######", id); if (ids.containsKey(id)) { ids.remove(id); } @@ -60,7 +60,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { String id = ctx.channel().id().asShortText(); BinaryModel binaryModel = (BinaryModel) msg; binaryModel.id = id; - logger.debug("######## 会话: {}, 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ########", + logger.debug("###### 会话:{}, 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ######", binaryModel.uuid, binaryModel.id, binaryModel.sendIndex, diff --git a/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java b/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java index 05518f7..554b44a 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java +++ b/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java @@ -1,6 +1,7 @@ package com.inspect.tcpserver.tcp; import com.alibaba.fastjson.JSON; +import com.inspect.tcpserver.util.Color; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.naming.NoNameCoder; import com.thoughtworks.xstream.io.xml.Xpp3Driver; @@ -38,7 +39,6 @@ public class UpJson2Xml { T obj = JSON.parseObject(json, clazz); return xStream.toXML(obj); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("######## UP解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.autodetectAnnotations(true); @@ -46,7 +46,7 @@ public class UpJson2Xml { T obj = JSON.parseObject(json, clazz); return xStream.toXML(obj); } catch (com.thoughtworks.xstream.XStreamException ex) { - logger.error("######## UP解析失败[PatrolDevice] {} ########", ex.getMessage()); + logger.error(Color.RED + "###### UpStreamJson2Xml解析失败:{} ######" + Color.END, ex.getMessage()); return null; } }