From 9bcd09c82250605d3ee9e11f6bbf0a34eb4501a4 Mon Sep 17 00:00:00 2001 From: htjcAdmin Date: Wed, 12 Mar 2025 11:41:40 +0800 Subject: [PATCH] =?UTF-8?q?/*=E5=B1=8F=E8=94=BD=E4=B8=8A=E7=BA=A7=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E5=8F=91=E9=80=81=EF=BC=8C=E8=B0=83=E6=95=B4=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=89=93=E5=8D=B0=E3=80=82*/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ClientController.java | 8 +- .../inspect/tcpserver/tcp/DownXml2Json.java | 7 +- .../com/inspect/tcpserver/tcp/MyDecoder.java | 4 +- .../inspect/tcpserver/tcp/NettyClient.java | 80 ++++++++------- .../tcpserver/tcp/NettyClientHandler.java | 2 +- .../inspect/tcpserver/tcp/NettyServer.java | 97 ++++++++++--------- .../tcpserver/tcp/NettyServerHandler.java | 14 +-- .../com/inspect/tcpserver/tcp/UpJson2Xml.java | 5 +- .../com/inspect/tcpserver/util/Color.java | 11 +++ 9 files changed, 119 insertions(+), 109 deletions(-) create mode 100644 src/main/java/com/inspect/tcpserver/util/Color.java diff --git a/src/main/java/com/inspect/tcpserver/controller/ClientController.java b/src/main/java/com/inspect/tcpserver/controller/ClientController.java index cb62421..26a8d37 100644 --- a/src/main/java/com/inspect/tcpserver/controller/ClientController.java +++ b/src/main/java/com/inspect/tcpserver/controller/ClientController.java @@ -38,7 +38,7 @@ public class ClientController { * 调用客户端发送消息 */ @PostMapping("sendMsg") - public AjaxResult sendMsg(@RequestBody String msg) { + public AjaxResult sendMsg(String uuid, @RequestBody String msg) { try { if (StringUtils.isBlank(msg)) { return AjaxResult.fail("500", "消息为空"); @@ -49,14 +49,14 @@ public class ClientController { return AjaxResult.fail("500", "消息JSON解析失败"); } - logger.info("################ 巡视主机客户端接收到消息, 发送到上级 ################\n{}", msg); + logger.info("######## 会话: {}, 巡视主机客户端接收到消息, 发送到上级 ########\n{}", uuid, msg); msg = msg.replaceAll("sendCode", "SendCode"); msg = msg.replaceAll("receiveCode", "ReceiveCode"); msg = msg.replaceAll("type", "Type"); - nettyClient.sendJsonMessage(msg); + //nettyClient.sendJsonMessage(uuid, msg); return AjaxResult.success(); } catch (Exception e) { - logger.error("################ 客户端发送消息捕获异常 ################\n{}", ExceptionUtils.getStackTrace(e)); + logger.error("######## 会话: {}, 客户端发送消息捕获异常: {} ########", 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 7066976..0d7cceb 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java +++ b/src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java @@ -27,7 +27,7 @@ public class DownXml2Json { this.alias = alias; } - public String DownStreamJson2Xml(String id, String xml, Class clazz) { + public String DownStreamJson2Xml(String uuid, String id, String xml, Class clazz) { try { XStream xStream = getXmlStreamInstance(); xStream.alias(alias, clazz); @@ -37,7 +37,7 @@ public class DownXml2Json { T obj = (T) xStream.fromXML(xml); return JSON.toJSONString(obj); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("################ 客户: {}, UP解析失败, 异常堆栈 [PatrolHost]: {} ################", id, e.getMessage()); + logger.error("######## 会话: {}, 客户: {}, UP解析失败, 异常堆栈 [PatrolHost] {} ########", uuid, id, e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.alias(deviceAlias, clazz); @@ -47,8 +47,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); - logger.error("################ 客户: {}, DOWN异常堆栈 ################\n{}", id, ExceptionUtils.getStackTrace(ex)); + logger.error("######## 客户: {}, DOWN解析失败[PatrolDevice] {} ########", id, e.getMessage()); return null; } } diff --git a/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java b/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java index 6827dfd..fcf67d6 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java +++ b/src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java @@ -28,9 +28,9 @@ public class MyDecoder extends ByteToMessageDecoder { in.skipBytes(in.readableBytes()); } - final String uuid = RandomStringUtils.randomAlphanumeric(32); + 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; diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java b/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java index 924ccf8..92ba5d1 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyClient.java @@ -18,7 +18,6 @@ import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.util.CharsetUtil; import io.netty.util.internal.StringUtil; import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; @@ -136,7 +135,7 @@ public class NettyClient { } //发送消息 - public void sendMsgToUpper(boolean request, String xml) { + public void sendMsgToUpper(boolean request, String uuid, String xml) { if (client != null && !StringUtil.isNullOrEmpty(xml)) { ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); int length = byteBuf.readableBytes(); @@ -157,7 +156,7 @@ public class NettyClient { client.sendMsg(allBuf); this.sendIndex++; } else { - logger.warn("与上级系统连接失败"); + logger.warn("######## 会话: {}, 与上级系统连接失败 ########", uuid); } } @@ -214,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) { @@ -233,7 +232,7 @@ public class NettyClient { case RobotType.robotIr: case RobotType.robotPtz: // json = downXml2Json.RobotControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, RobotControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, RobotControl.class); break; case UAVType.uav: case UAVType.uavXj: @@ -241,31 +240,31 @@ public class NettyClient { case UAVType.uavYt: case UAVType.nest: // json = downXml2Json.UavControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, RobotControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, RobotControl.class); break; case TaskType.taskControl: // json = downXml2Json.BaseControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, BaseControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, BaseControl.class); break; case TaskType.taskSend: // json = downXml2Json.TaskSendControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskSendControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, TaskSendControl.class); break; case TaskType.lendonTask: // json = downXml2Json.LinkageTaskControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, LinkageTaskControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, LinkageTaskControl.class); break; case TaskType.taskArea: // json = downXml2Json.AreaControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, AreaControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, AreaControl.class); break; case ModelType.modelSync: // json = downXml2Json.BaseControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, BaseControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, BaseControl.class); break; case QueryType.queryResult: // json = downXml2Json.ResultControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ResultControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ResultControl.class); break; default: logger.warn("client-handle-接收到的type:{},不在处理范围内,不予处理", type); @@ -309,7 +308,7 @@ public class NettyClient { String msg = upJson2Xml.UpStreamJson2Xml(response, ModelControl.class); // 上报上级系统,会话类型为响应 - sendMsgToUpper(false, msg); + sendMsgToUpper(false, binaryModel.uuid, msg); } } @@ -328,7 +327,7 @@ public class NettyClient { xStream.addPermission(AnyTypePermission.ANY); obj = (RegisterResponseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("################ 注册解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(e)); + logger.error("######## 注册解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = getXmlStreamInstance(); xStream.alias(deviceAlias, RegisterResponseControl.class); @@ -337,13 +336,12 @@ public class NettyClient { xStream.addPermission(AnyTypePermission.ANY); obj = (RegisterResponseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("################ 解析失败[PatrolDevice] ################"); - logger.error("################ 异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(e2)); + logger.error("######## 解析失败[PatrolDevice] {} ########", e2.getMessage()); } } TimerSendControl(obj); - logger.info("################ 客户端 接收到服务端注册回馈, 服务注册完成 ################ "); + logger.info("######## 客户端 接收到服务端注册回馈, 服务注册完成 ########"); } //处理心跳 @@ -354,12 +352,12 @@ public class NettyClient { int patroldevice = Integer.parseInt(response.Items.get(0).patroldevice_run_interval); int nest = Integer.parseInt(response.Items.get(0).nest_run_interval); int weather = Integer.parseInt(response.Items.get(0).weather_interval); - SendHeart(); + sendHeartToUpper(); // 定时心跳报活 scheduledExecutor.scheduleWithFixedDelay(new TimerTask() { @Override public void run() { - SendHeart(); + sendHeartToUpper(); } }, 0, heart, TimeUnit.SECONDS); @@ -452,14 +450,14 @@ public class NettyClient { return object.toString(); } - public void SendRegister() { + public void sendRegisterToUpper() { String xml = createRegHeart(false); - sendMsgToUpper(true, xml); + sendMsgToUpper(true, "", xml); } - public void SendHeart() { + public void sendHeartToUpper() { String xml = createRegHeart(true); - sendMsgToUpper(true, xml); + sendMsgToUpper(true, "", xml); } @@ -483,7 +481,7 @@ public class NettyClient { * * @param json */ - public void sendJsonMessage(String json) { + public void sendJsonMessage(String uuid, String json) { JSONObject obj = JSONObject.parseObject(json); if (obj != null) { // 处理身份 @@ -495,86 +493,86 @@ public class NettyClient { case PushType.environment: // xml = upJson2Xml.EnvironmentControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, EnvironmentControl.class); - logger.info("################ 向上级系统发送环境数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送环境数据 ########\n{}", uuid, xml); break; case PushType.alarm: // xml = upJson2Xml.AlarmControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, AlarmControl.class); - logger.info("################ 向上级系统发送巡视设备异常告警数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视设备异常告警数据 ########\n{}", uuid, xml); break; case PushType.analysisAlarm: // xml = upJson2Xml.AnalysisControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, AnalysisControl.class); - logger.info("################ 向上级系统发送告警数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送告警数据 ########\n{}", uuid, xml); break; case PushType.location: // xml = upJson2Xml.LocationControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, LocationControl.class); - logger.info("################ 向上级系统发送巡视设备坐标 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视设备坐标 ########\n{}", uuid, xml); break; case PushType.monitor: // xml = upJson2Xml.MonitorControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, MonitorControl.class); - logger.info("################ 向上级系统发送静默监视告警数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送静默监视告警数据 ########\n{}", uuid, xml); break; case PushType.nestRunning: // xml = upJson2Xml.NestRunningJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, NestRuningControl.class); - logger.info("################ 向上级系统发送无人机机巢运行数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送无人机机巢运行数据 ########\n{}", uuid, xml); break; case PushType.nestState: // xml = upJson2Xml.NestStateJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, NestStateControl.class); - logger.info("################ 向上级系统发送无人机机巢状态数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送无人机机巢状态数据 ########\n{}", uuid, xml); break; case PushType.patrolDeviceState: // xml = upJson2Xml.PatrolDeviceStateControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceStateControl.class); - logger.info("################ 向上级系统发送巡视设备状态数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视设备状态数据 ########\n{}", uuid, xml); break; case PushType.patrolDeviceRunning: // xml = upJson2Xml.PatrolDeviceRunningControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceRuningControl.class); - logger.info("################ 向上级系统发送巡视设备运行数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视设备运行数据 ########\n{}", uuid, xml); break; case PushType.result: // xml = upJson2Xml.TaskResultControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, TaskResultControl.class); - logger.info("################ 向上级系统发送巡视结果 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视结果 ########\n{}", uuid, xml); break; case PushType.taskState: // xml = upJson2Xml.TaskStateControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, TaskStateControl.class); - logger.info("################ 向上级系统发送任务状态数据 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送任务状态数据 ########\n{}", uuid, xml); break; case PushType.total: // xml = upJson2Xml.ReportControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, ReportControl.class); - logger.info("################ 向上级系统发送巡视设备统计信息上报 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视设备统计信息上报 ########\n{}", uuid, xml); break; case PushType.route: // xml = upJson2Xml.RouteControlJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, RouteControl.class); - logger.info("################ 向上级系统发送巡视路线 ################\n{}", xml); + logger.info("######## 会话: {}, 向上级系统发送巡视路线 ########\n{}", uuid, xml); break; case SystemType.system: // xml = upJson2Xml.ModelJson2Xml(json); xml = upJson2Xml.UpStreamJson2Xml(json, ModelControl.class); - logger.info("################ 向上级系统发送系统数据 ################\n{}", 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{}", xml); + logger.info("######## 会话: {}, 向上级系统发送模型更新上报指令 ########\n{}", uuid, xml); break; default: - logger.warn("应用向上级系统发送消息,type:{}不在处理范围内,不予处理", type); + logger.warn("######## 会话: {}, 应用向上级系统发送消息, 类型: [{}] 不在处理范围内, 不予处理 ########", uuid, type); } if (!StringUtils.isEmpty(xml)) { // 将设备别名转换为上级别名 xml = xml.replaceAll(deviceAlias, alias); - sendMsgToUpper(true, xml); + sendMsgToUpper(true, uuid, xml); } } } diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyClientHandler.java b/src/main/java/com/inspect/tcpserver/tcp/NettyClientHandler.java index 60b987d..ef12062 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyClientHandler.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyClientHandler.java @@ -61,7 +61,7 @@ public class NettyClientHandler extends ChannelInboundHandlerAdapter { Context = ctx; try { - nettyClient.SendRegister(); + nettyClient.sendRegisterToUpper(); } catch (Exception e) { e.printStackTrace(); throw e; diff --git a/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java b/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java index 74e2a18..c886235 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyServer.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; import com.inspect.tcpserver.constant.Constant; import com.inspect.tcpserver.controller.ClientController; import com.inspect.tcpserver.domain.DeviceServerProperties; +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; @@ -139,8 +140,8 @@ public class NettyServer { } //发送消息 - public void sendMsg(String uuid, String client, boolean request, String xml) { - if (tcpClientMap.containsKey(client) && !StringUtil.isNullOrEmpty(xml)) { + public void sendMsg(String uuid, String clientKey, boolean request, String xml) { + if (tcpClientMap.containsKey(clientKey) && !StringUtil.isNullOrEmpty(xml)) { ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); int length = byteBuf.readableBytes(); ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength); @@ -154,11 +155,11 @@ 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("################ 会话: {}, 客户: {}, 向设备端机器人回送消息序列号: {}, 接收端序列号: {}, 消息体: ################\n{}", uuid, client, sendIndex, receiveIndex, xml); - nettyServerHandler.sendMsg(uuid, tcpClientMap.get(client), allBuf); + logger.info("######## 会话:{}, 客户:{}, 向设备回送序列:{}, 接收端序列:{}, 消息########\n{}", uuid, clientKey, sendIndex, receiveIndex, xml); + nettyServerHandler.sendMsg(uuid, clientKey, tcpClientMap.get(clientKey), allBuf); sendIndex++; } else { - logger.warn("################ 会话: {}, 设备端机器人: [{}] 离线!!! ################", uuid, client); + logger.warn("######## 会话: {}, 设备端机器人: [{}] 离线!!! ########", uuid, clientKey); } } @@ -201,7 +202,7 @@ public class NettyServer { command = Integer.parseInt(root.element("Command").getText()); } - logger.info("################ 会话: {}, 客户: {}, 消息类型: {}, 命令:{}, 消息体: ################ \n{}", binaryModel.uuid, binaryModel.id, type, command, xml); + logger.info(Color.RED + "######## 会话: {}, 客户: {}, 消息类型: {}, 命令:{}, 消息体: ########\n{}" + Color.END, binaryModel.uuid, binaryModel.id, type, command, xml); //判断是否重发 if (type == SystemType.system) { if (command == SystemType.has_response || command == SystemType.no_response) { @@ -218,12 +219,12 @@ public class NettyServer { switch (command) { case SystemType.register_request: // 收到接入侧注册信息 - logger.info("################ 会话: {}, 客户: {}, 客户端注册信息 ################", binaryModel.uuid, binaryModel.id); + logger.info("######## 会话: {}, 客户: {}, 客户端注册信息 ########", binaryModel.uuid, binaryModel.id); dealRegister(binaryModel.uuid, xml); break; case SystemType.heart_request: // 处理心跳请求响应 - logger.info("################ 会话: {}, 客户: {}, 客户端心跳 ################", binaryModel.uuid, binaryModel.id); + logger.info("######## 会话: {}, 客户: {}, 客户端心跳 ########", binaryModel.uuid, binaryModel.id); sendHeartBeat(binaryModel.uuid, xml); break; case SystemType.has_response: @@ -232,22 +233,23 @@ public class NettyServer { // 处理设备上报的模型同步响应 if (null != root.element("Items").element("Item").attribute("device_file_path")) { // 收到接入侧模型同步数据 - logger.info("################ 会话: {}, 客户: {}, 客户端模型同步数据 ################", binaryModel.uuid, binaryModel.id); + logger.info(Color.YELLOW + "######## 会话: {}, 客户: {}, 客户端模型同步数据 ########" + Color.END, binaryModel.uuid, binaryModel.id); // json = downXml2Json.ModelControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ModelControl.class); JSONObject jsonObject = JSONObject.parseObject(json); + jsonObject.put("uuid", binaryModel.uuid); jsonObject.put("Type", Constant.MODEL_UP_TYPE); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, jsonObject.toJSONString()); } // 任务控制响应任务执行ID if (null != root.element("Items").element("Item").attribute("task_patrolled_id")) { // 收到接入侧任务下发或控制回复数据 - logger.info("################ 会话: {}, 客户: {}, 设备端任务下发或控制回复数据 ################", binaryModel.uuid, binaryModel.id); + logger.info("######## 会话: {}, 客户: {}, 设备端任务下发或控制回复数据 ########", binaryModel.uuid, binaryModel.id); // json = downXml2Json.ModelControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ModelControl.class); JSONObject jsonObject = JSONObject.parseObject(json); jsonObject.put("SendCode", ""); - clientController.sendMsg(jsonObject.toJSONString()); + clientController.sendMsg(binaryModel.uuid, jsonObject.toJSONString()); } } else { // 接收到的系统类信息报文中,root:{},中不包含items或items中没有item,不予处理 @@ -256,65 +258,68 @@ public class NettyServer { break; default: // 接收到的系统类信息报文中,command:{},不在处理范围内,不予处理 - logger.warn("################ 非法的消息不予处理, 客户: {}, 命令: {}, 消息体 ################ \n{}", binaryModel.id, command, xml); + logger.warn("######## 非法的消息不予处理, 客户: {}, 命令: {}, 消息体 ########\n{}", binaryModel.id, command, xml); } break; case PushType.patrolDeviceState: // json = downXml2Json.PatrolDeviceStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceStateControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备状态数据 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, PatrolDeviceStateControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备状态数据 ########", binaryModel.uuid, binaryModel.id); break; case PushType.patrolDeviceRunning: // json = downXml2Json.PatrolDeviceRunningControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceRuningControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备运行数据 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, PatrolDeviceRuningControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备运行数据 ########", binaryModel.uuid, binaryModel.id); break; case PushType.nestState: // json = downXml2Json.NestStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestStateControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端机巢状态数据 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, NestStateControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端机巢状态数据 ########", binaryModel.uuid, binaryModel.id); break; case PushType.nestRunning: // json = downXml2Json.NestRunningControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestRuningControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端机巢运行数据 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, NestRuningControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端机巢运行数据 ########", binaryModel.uuid, binaryModel.id); break; case PushType.location: // json = downXml2Json.LocationControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, LocationControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备坐标 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, LocationControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备坐标 ########", binaryModel.uuid, binaryModel.id); break; case PushType.route: // json = downXml2Json.RouteControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, RouteControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备路线 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, RouteControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备路线 ########", binaryModel.uuid, binaryModel.id); break; case PushType.alarm: // json = down.AlarmControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, AlarmControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备异常告警 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, AlarmControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备异常告警 ########", binaryModel.uuid, binaryModel.id); break; case PushType.environment: // json = downXml2Json.EnvironmentControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, EnvironmentControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备上报环境数据 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, EnvironmentControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备上报环境数据 ########", binaryModel.uuid, binaryModel.id); break; case PushType.taskState: // json = downXml2Json.TaskStateControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskStateControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端设备任务状态 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, TaskStateControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端设备任务状态 ########", binaryModel.uuid, binaryModel.id); break; case PushType.result: // json = downXml2Json.TaskResultControlXml2Json(xml); - json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskResultControl.class); - logger.info("################ 会话: {}, 客户: {}, 客户端巡视结果 ################", binaryModel.uuid, binaryModel.id); + json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, TaskResultControl.class); + logger.info("######## 会话: {}, 客户: {}, 客户端巡视结果 ########", binaryModel.uuid, binaryModel.id); break; default: // server-handle-接收到的type:{},不在处理范围内,不予处理 - logger.info("################ 会话: {}, 客户: {}, 非法的消息不予处理, 类型{}, 消息体 ################", binaryModel.id, type, xml); + logger.info("######## 会话: {}, 客户: {}, 非法的消息不予处理, 类型{}, 消息体 {} ########", binaryModel.uuid, binaryModel.id, type, xml); } if (type != SystemType.system && !StringUtil.isNullOrEmpty(json)) { //rabbitmq推送到消息队列中基于springboot_xggd + JSONObject jsonObject = JSONObject.parseObject(json); + jsonObject.put("uuid", binaryModel.uuid); + json = jsonObject.toJSONString(); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json); String receiveCode = root.element("ReceiveCode").getText(); feedbackToDevice(binaryModel.uuid, receiveCode, sendCode); @@ -348,7 +353,7 @@ public class NettyServer { xStream.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("################ 注册解析失败, 异常堆栈[PatrolHost] {} ################", e.getMessage()); + logger.error("######## 注册异常堆栈[PatrolHost] 会话: {}, {} ########", uuid, e.getMessage()); try { XStream xStreamEx = getXmlStreamInstance(); xStreamEx.alias(aliasDevice, BaseControl.class); @@ -357,8 +362,7 @@ public class NettyServer { xStreamEx.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStreamEx.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("################ 解析失败[PatrolDevice] ################"); - logger.error("################ 异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(e2)); + logger.error("######## 解析失败[PatrolDevice] {} ########", e2.getMessage()); } } @@ -390,9 +394,10 @@ public class NettyServer { JSONObject jsonObject = new JSONObject(); jsonObject.put("uuid", uuid); jsonObject.put("patroldevice_code", obj.SendCode); + jsonObject.put("SendCode", obj.SendCode); jsonObject.put("Type", "heartbeat"); jsonObject.put("eventType", "connect"); - jsonObject.put("heart_beat_interval", ConfigType.heart_beat_interval); + jsonObject.put("HeartBeatInterval", ConfigType.heart_beat_interval); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, jsonObject.toJSONString()); } else { @@ -441,15 +446,14 @@ public class NettyServer { xStream.autodetectAnnotations(true); xml = xStream.toXML(responseControl); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("################ DOWN REGISTER 解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(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] ################"); - logger.error("################ DOWN REGISTER 异常堆栈[PatrolDevice] ################\n{}", ExceptionUtils.getStackTrace(e2)); + logger.error("################ DOWN REGISTER 解析失败[PatrolDevice] {} ################", e2.getMessage()); } } sendMsg(uuid, sendCode, false, xml); @@ -466,7 +470,7 @@ 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()); + logger.error("######## HEARTBEAT TO MQ 解析失败, 异常堆栈[PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.alias(aliasDevice, BaseControl.class); @@ -475,8 +479,7 @@ public class NettyServer { xStream.addPermission(AnyTypePermission.ANY); obj = (BaseControl) xStream.fromXML(xml); } catch (com.thoughtworks.xstream.XStreamException e2) { - logger.error("################ HEARTBEAT TO MQ 解析失败[PatrolDevice] ################"); - logger.error("################ HEARTBEAT TO MQ 异常堆栈[PatrolDevice] ################\n{}", ExceptionUtils.getStackTrace(e2)); + logger.error("######## HEARTBEAT TO MQ 解析失败[PatrolDevice] {} ########", e2.getMessage()); } } @@ -488,7 +491,7 @@ public class NettyServer { jsonObject.put("SendCode", obj.SendCode); jsonObject.put("Type", "heartbeat"); jsonObject.put("eventType", "heart"); - jsonObject.put("heart_beat_interval", ConfigType.heart_beat_interval); + jsonObject.put("HeartBeatInterval", ConfigType.heart_beat_interval); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, jsonObject.toJSONString()); } @@ -549,7 +552,7 @@ public class NettyServer { } if (!StringUtils.isEmpty(xml)) { - logger.info("################ 向设备端下发命令 ################\n{}", xml); + //logger.info("################ 向设备端下发命令 ################\n{}", xml); sendMsg("", 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 761078c..122ecd4 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java +++ b/src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java @@ -20,11 +20,11 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter { this.nettyServer = nettyServer; } - public void sendMsg(String uuid, String id, ByteBuf byteBuf) { - if (ids.containsKey(id)) { + public void sendMsg(String uuid, String clientKey, String clientValue, ByteBuf byteBuf) { + if (ids.containsKey(clientValue)) { ByteBuf forPrint = byteBuf.copy(); - logger.info("################ 会话: {}, 客户: {}, 下行原始报文 ################\n [{}]", uuid, id, ByteBufUtil.hexDump(forPrint)); - ids.get(id).writeAndFlush(byteBuf); + 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 6115a59..878268a 100644 --- a/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java +++ b/src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java @@ -39,7 +39,7 @@ public class UpJson2Xml { T obj = JSON.parseObject(json, clazz); return xStream.toXML(obj); } catch (com.thoughtworks.xstream.XStreamException e) { - logger.error("################ UP解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(e)); + logger.error("######## UP解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage()); try { XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); xStream.autodetectAnnotations(true); @@ -47,8 +47,7 @@ public class UpJson2Xml { T obj = JSON.parseObject(json, clazz); return xStream.toXML(obj); } catch (com.thoughtworks.xstream.XStreamException ex) { - logger.error("################ UP解析失败[PatrolDevice] ################"); - logger.error("################ UP异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(ex)); + logger.error("######## UP解析失败[PatrolDevice] {} ########", ex.getMessage()); return null; } } diff --git a/src/main/java/com/inspect/tcpserver/util/Color.java b/src/main/java/com/inspect/tcpserver/util/Color.java new file mode 100644 index 0000000..0900c91 --- /dev/null +++ b/src/main/java/com/inspect/tcpserver/util/Color.java @@ -0,0 +1,11 @@ +package com.inspect.tcpserver.util; + +public class Color { + public static final String END = "\033[0m"; + public static final String RED = "\033[31m"; + public static final String GREEN = "\033[32m"; + public static final String YELLOW = "\033[33m"; + public static final String BLUE = "\033[34m"; + public static final String MAGENTA = "\033[35m"; + public static final String CYAN = "\033[36m"; +}