Browse Source

优化日志打印

master
lijw 9 months ago
parent
commit
a102f1bc01
7 changed files with 97 additions and 92 deletions
  1. +3
    -2
      src/main/java/com/inspect/tcpserver/controller/ClientController.java
  2. +3
    -3
      src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java
  3. +4
    -1
      src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java
  4. +21
    -22
      src/main/java/com/inspect/tcpserver/tcp/NettyClient.java
  5. +60
    -58
      src/main/java/com/inspect/tcpserver/tcp/NettyServer.java
  6. +4
    -4
      src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java
  7. +2
    -2
      src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java

+ 3
- 2
src/main/java/com/inspect/tcpserver/controller/ClientController.java View File

@ -3,6 +3,7 @@ package com.inspect.tcpserver.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.inspect.tcpserver.domain.AjaxResult; import com.inspect.tcpserver.domain.AjaxResult;
import com.inspect.tcpserver.tcp.NettyClient; import com.inspect.tcpserver.tcp.NettyClient;
import com.inspect.tcpserver.util.Color;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils; import org.apache.commons.lang3.exception.ExceptionUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -49,14 +50,14 @@ public class ClientController {
return AjaxResult.fail("500", "消息JSON解析失败"); return AjaxResult.fail("500", "消息JSON解析失败");
} }
logger.info("######## 会话: {}, 巡视主机客户端接收到消息, 发送到上级 ########\n{}", uuid, msg);
msg = msg.replaceAll("sendCode", "SendCode"); msg = msg.replaceAll("sendCode", "SendCode");
msg = msg.replaceAll("receiveCode", "ReceiveCode"); msg = msg.replaceAll("receiveCode", "ReceiveCode");
msg = msg.replaceAll("type", "Type"); msg = msg.replaceAll("type", "Type");
//logger.info("###### 会话:{}, 巡视主机客户端接收到消息, 发送到上级 ######\n{}", uuid, msg);
//nettyClient.sendJsonMessage(uuid, msg); //nettyClient.sendJsonMessage(uuid, msg);
return AjaxResult.success(); return AjaxResult.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("######## 会话: {}, 客户端发送消息捕获异常: {} ########", uuid, e.getMessage());
logger.error(Color.RED + "###### 会话:{}, 客户端发送消息捕获异常:{} ######" + Color.END, uuid, e.getMessage());
return AjaxResult.fail(500, "数据格式不正确"); return AjaxResult.fail(500, "数据格式不正确");
} }
} }


+ 3
- 3
src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java View File

@ -1,6 +1,7 @@
package com.inspect.tcpserver.tcp; package com.inspect.tcpserver.tcp;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.inspect.tcpserver.util.Color;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder; import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.Xpp3Driver; import com.thoughtworks.xstream.io.xml.Xpp3Driver;
@ -36,7 +37,6 @@ public class DownXml2Json {
T obj = (T) xStream.fromXML(xml); T obj = (T) xStream.fromXML(xml);
return JSON.toJSONString(obj); return JSON.toJSONString(obj);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## 会话: {}, 客户: {}, UP解析失败, 异常堆栈 [PatrolHost] {} ########", uuid, id, e.getMessage());
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(deviceAlias, clazz); xStream.alias(deviceAlias, clazz);
@ -46,7 +46,7 @@ public class DownXml2Json {
T obj = (T) xStream.fromXML(xml); T obj = (T) xStream.fromXML(xml);
return JSON.toJSONString(obj); return JSON.toJSONString(obj);
} catch (com.thoughtworks.xstream.XStreamException ex) { } 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; return null;
} }
} }
@ -224,7 +224,7 @@ public class DownXml2Json {
public String AlarmControlXml2Json(String xml) { public String AlarmControlXml2Json(String xml) {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
//xStream.alias(alias, AlarmControl.class); //xStream.alias(alias, AlarmControl.class);
logger.info("[XML] AlarmControlXml2Json alias: {}", alias);
logger.info("[XML] AlarmControlXml2Json alias:{}", alias);
xStream.alias(alias, AlarmControl.class); xStream.alias(alias, AlarmControl.class);
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements(); xStream.ignoreUnknownElements();


+ 4
- 1
src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java View File

@ -1,5 +1,6 @@
package com.inspect.tcpserver.tcp; package com.inspect.tcpserver.tcp;
import com.inspect.tcpserver.util.Color;
import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil; import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
@ -30,7 +31,7 @@ public class MyDecoder extends ByteToMessageDecoder {
final String uuid = RandomStringUtils.randomAlphanumeric(16); final String uuid = RandomStringUtils.randomAlphanumeric(16);
// ByteBuf forPrint = in.copy(); // 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; int index;
String flag; String flag;
@ -60,6 +61,8 @@ public class MyDecoder extends ByteToMessageDecoder {
in.readBytes(payload); in.readBytes(payload);
if(in.readableBytes() > 0) { if(in.readableBytes() > 0) {
in.readShortLE(); in.readShortLE();
} else {
log.warn(Color.RED + "###### readShortLE() but readableBytes = 0 ######" + Color.END);
} }
BinaryModel binaryModel = new BinaryModel(); BinaryModel binaryModel = new BinaryModel();
binaryModel.receiveIndex = receiveIndex; binaryModel.receiveIndex = receiveIndex;


+ 21
- 22
src/main/java/com/inspect/tcpserver/tcp/NettyClient.java View File

@ -156,7 +156,7 @@ public class NettyClient {
client.sendMsg(allBuf); client.sendMsg(allBuf);
this.sendIndex++; this.sendIndex++;
} else { } else {
logger.warn("######## 会话: {}, 与上级系统连接失败 ########", uuid);
logger.warn("###### 会话:{}, 与上级系统连接失败 ######", uuid);
} }
} }
@ -213,7 +213,7 @@ public class NettyClient {
String response = ""; String response = "";
String json = null; String json = null;
logger.info("######## 收到上级系统消息:{}, 类型: {} ########\n{}", binaryModel.id, type, xml);
logger.info("###### 收到上级系统消息:{}, 类型:{} ######\n{}", binaryModel.id, type, xml);
switch (type) { switch (type) {
case SystemType.system: case SystemType.system:
switch (command) { switch (command) {
@ -267,7 +267,7 @@ public class NettyClient {
json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ResultControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.uuid, binaryModel.id, xml, ResultControl.class);
break; break;
default: default:
logger.warn("client-handle-接收到的type:{},不在处理范围内,不予处理", type);
logger.warn("ClienHandler接收到的type:{}不在处理范围内, 不予处理", type);
} }
// 将上级下发的指令转发到业务端处理接收业务端处理后的结果上报给上级系统 // 将上级下发的指令转发到业务端处理接收业务端处理后的结果上报给上级系统
@ -327,7 +327,6 @@ public class NettyClient {
xStream.addPermission(AnyTypePermission.ANY); xStream.addPermission(AnyTypePermission.ANY);
obj = (RegisterResponseControl) xStream.fromXML(xml); obj = (RegisterResponseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## 注册解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage());
try { try {
XStream xStream = getXmlStreamInstance(); XStream xStream = getXmlStreamInstance();
xStream.alias(deviceAlias, RegisterResponseControl.class); xStream.alias(deviceAlias, RegisterResponseControl.class);
@ -336,12 +335,12 @@ public class NettyClient {
xStream.addPermission(AnyTypePermission.ANY); xStream.addPermission(AnyTypePermission.ANY);
obj = (RegisterResponseControl) xStream.fromXML(xml); obj = (RegisterResponseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e2) { } catch (com.thoughtworks.xstream.XStreamException e2) {
logger.error("######## 解析失败[PatrolDevice] {} ########", e2.getMessage());
logger.error("###### dealRegister解析失败:{} ######", e2.getMessage());
} }
} }
TimerSendControl(obj); TimerSendControl(obj);
logger.info("######## 客户端 接收到服务端注册回馈, 服务注册完成 ########");
logger.info("###### 客户端接收到服务端注册回馈, 服务注册完成 ######");
} }
//处理心跳 //处理心跳
@ -493,81 +492,81 @@ public class NettyClient {
case PushType.environment: case PushType.environment:
// xml = upJson2Xml.EnvironmentControlJson2Xml(json); // xml = upJson2Xml.EnvironmentControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, EnvironmentControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, EnvironmentControl.class);
logger.info("######## 会话: {}, 向上级系统发送环境数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送环境数据 ######\n{}", uuid, xml);
break; break;
case PushType.alarm: case PushType.alarm:
// xml = upJson2Xml.AlarmControlJson2Xml(json); // xml = upJson2Xml.AlarmControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, AlarmControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, AlarmControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视设备异常告警数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视设备异常告警数据 ######\n{}", uuid, xml);
break; break;
case PushType.analysisAlarm: case PushType.analysisAlarm:
// xml = upJson2Xml.AnalysisControlJson2Xml(json); // xml = upJson2Xml.AnalysisControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, AnalysisControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, AnalysisControl.class);
logger.info("######## 会话: {}, 向上级系统发送告警数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送告警数据 ######\n{}", uuid, xml);
break; break;
case PushType.location: case PushType.location:
// xml = upJson2Xml.LocationControlJson2Xml(json); // xml = upJson2Xml.LocationControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, LocationControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, LocationControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视设备坐标 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视设备坐标 ######\n{}", uuid, xml);
break; break;
case PushType.monitor: case PushType.monitor:
// xml = upJson2Xml.MonitorControlJson2Xml(json); // xml = upJson2Xml.MonitorControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, MonitorControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, MonitorControl.class);
logger.info("######## 会话: {}, 向上级系统发送静默监视告警数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送静默监视告警数据 ######\n{}", uuid, xml);
break; break;
case PushType.nestRunning: case PushType.nestRunning:
// xml = upJson2Xml.NestRunningJson2Xml(json); // xml = upJson2Xml.NestRunningJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, NestRunningControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, NestRunningControl.class);
logger.info("######## 会话: {}, 向上级系统发送无人机机巢运行数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送无人机机巢运行数据 ######\n{}", uuid, xml);
break; break;
case PushType.nestState: case PushType.nestState:
// xml = upJson2Xml.NestStateJson2Xml(json); // xml = upJson2Xml.NestStateJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, NestStateControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, NestStateControl.class);
logger.info("######## 会话: {}, 向上级系统发送无人机机巢状态数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送无人机机巢状态数据 ######\n{}", uuid, xml);
break; break;
case PushType.patrolDeviceState: case PushType.patrolDeviceState:
// xml = upJson2Xml.PatrolDeviceStateControlJson2Xml(json); // xml = upJson2Xml.PatrolDeviceStateControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceStateControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceStateControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视设备状态数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视设备状态数据 ######\n{}", uuid, xml);
break; break;
case PushType.patrolDeviceRunning: case PushType.patrolDeviceRunning:
// xml = upJson2Xml.PatrolDeviceRunningControlJson2Xml(json); // xml = upJson2Xml.PatrolDeviceRunningControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceRunningControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, PatrolDeviceRunningControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视设备运行数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视设备运行数据 ######\n{}", uuid, xml);
break; break;
case PushType.result: case PushType.result:
// xml = upJson2Xml.TaskResultControlJson2Xml(json); // xml = upJson2Xml.TaskResultControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, TaskResultControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, TaskResultControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视结果 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视结果 ######\n{}", uuid, xml);
break; break;
case PushType.taskState: case PushType.taskState:
// xml = upJson2Xml.TaskStateControlJson2Xml(json); // xml = upJson2Xml.TaskStateControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, TaskStateControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, TaskStateControl.class);
logger.info("######## 会话: {}, 向上级系统发送任务状态数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送任务状态数据 ######\n{}", uuid, xml);
break; break;
case PushType.total: case PushType.total:
// xml = upJson2Xml.ReportControlJson2Xml(json); // xml = upJson2Xml.ReportControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, ReportControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, ReportControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视设备统计信息上报 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视设备统计信息上报 ######\n{}", uuid, xml);
break; break;
case PushType.route: case PushType.route:
// xml = upJson2Xml.RouteControlJson2Xml(json); // xml = upJson2Xml.RouteControlJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, RouteControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, RouteControl.class);
logger.info("######## 会话: {}, 向上级系统发送巡视路线 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送巡视路线 ######\n{}", uuid, xml);
break; break;
case SystemType.system: case SystemType.system:
// xml = upJson2Xml.ModelJson2Xml(json); // xml = upJson2Xml.ModelJson2Xml(json);
xml = upJson2Xml.UpStreamJson2Xml(json, ModelControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, ModelControl.class);
logger.info("######## 会话: {}, 向上级系统发送系统数据 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送系统数据 ######\n{}", uuid, xml);
break; break;
case ModelType.modelUpdate: case ModelType.modelUpdate:
// xml = upJson2Xml.UpdateModelJson2Xml(json); // xml = upJson2Xml.UpdateModelJson2Xml(json);
//xml = up.ModelJson2Xml(json, UpdateModelControl.class); //xml = up.ModelJson2Xml(json, UpdateModelControl.class);
xml = upJson2Xml.UpStreamJson2Xml(json, UpdateModelControl.class); xml = upJson2Xml.UpStreamJson2Xml(json, UpdateModelControl.class);
logger.info("######## 会话: {}, 向上级系统发送模型更新上报指令 ########\n{}", uuid, xml);
logger.info("###### 会话:{}, 向上级系统发送模型更新上报指令 ######\n{}", uuid, xml);
break; break;
default: default:
logger.warn("######## 会话: {}, 应用向上级系统发送消息, 类型: [{}] 不在处理范围内, 不予处理 ########", uuid, type);
logger.warn("###### 会话:{}, 应用向上级系统发送消息, 类型: [{}] 不在处理范围内, 不予处理 ######", uuid, type);
} }
if (!StringUtils.isEmpty(xml)) { if (!StringUtils.isEmpty(xml)) {
// 将设备别名转换为上级别名 // 将设备别名转换为上级别名


+ 60
- 58
src/main/java/com/inspect/tcpserver/tcp/NettyServer.java View File

@ -121,7 +121,7 @@ public class NettyServer {
//绑定端口,开始接收进来的连接 //绑定端口,开始接收进来的连接
try { try {
ChannelFuture future = bootstrap.bind(serverPort).sync(); ChannelFuture future = bootstrap.bind(serverPort).sync();
logger.info("################ TCP服务器启动 ################");
logger.info("###### TCP服务器启动 ######");
future.channel().closeFuture().sync(); future.channel().closeFuture().sync();
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); 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) { 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); ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8);
int length = byteBuf.readableBytes(); int length = byteBuf.readableBytes();
ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength); ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength);
@ -158,17 +163,16 @@ public class NettyServer {
allBuf.writeByte(0xEB); allBuf.writeByte(0xEB);
allBuf.writeByte(0x90); allBuf.writeByte(0x90);
redisTemplate.opsForValue().set(String.valueOf(sendIndex), allBuf.toString(CharsetUtil.US_ASCII), 60L, TimeUnit.SECONDS); 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); nettyServerHandler.sendMsg(uuid, clientKey, tcpClientMap.get(clientKey), allBuf);
sendIndex++; sendIndex++;
} else { } 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) { public void flushMsgToDeviceBroadcast(String uuid, String clientKey, boolean request, String xml) {
for (Map.Entry<String, String> entry : tcpClientMap.entrySet()) { for (Map.Entry<String, String> entry : tcpClientMap.entrySet()) {
logger.info("######## flushMsgToDeviceBroadcast key: {}, value: {} ########", entry.getKey(), entry.getValue());
ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8);
int length = byteBuf.readableBytes(); int length = byteBuf.readableBytes();
ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength); ByteBuf allBuf = Unpooled.buffer(length + ConfigType.dataLength);
@ -182,7 +186,7 @@ public class NettyServer {
allBuf.writeByte(0xEB); allBuf.writeByte(0xEB);
allBuf.writeByte(0x90); allBuf.writeByte(0x90);
redisTemplate.opsForValue().set(String.valueOf(sendIndex), allBuf.toString(CharsetUtil.US_ASCII), 60L, TimeUnit.SECONDS); 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); nettyServerHandler.sendMsg(uuid, entry.getKey(), tcpClientMap.get(entry.getKey()), allBuf);
sendIndex++; sendIndex++;
try { try {
@ -231,7 +235,8 @@ public class NettyServer {
command = Integer.parseInt(root.element("Command").getText()); 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 (type == SystemType.system) {
if (command == SystemType.has_response || command == SystemType.no_response) { if (command == SystemType.has_response || command == SystemType.no_response) {
@ -241,12 +246,15 @@ public class NettyServer {
resetSendMsg(binaryModel.receiveIndex, sendCode); resetSendMsg(binaryModel.receiveIndex, sendCode);
return; return;
} else if (code.equals(ResponseType.succeed)) { } 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)) { } else if (code.equals(ResponseType.fault)) {
logger.warn("######## 响应结果为失败, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml);
logger.warn(Color.RED + "###### 响应结果为失败 ######" + Color.END);
return; return;
} else if (code.equals(ResponseType.reject)) { } else if (code.equals(ResponseType.reject)) {
logger.warn("######## 响应结果为拒绝, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml);
logger.warn(Color.RED + "###### 响应结果为拒绝 ######" + Color.END);
return; return;
} }
} }
@ -258,13 +266,13 @@ public class NettyServer {
switch (command) { switch (command) {
case SystemType.register_request: 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; break;
case SystemType.heart_request: 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; break;
case SystemType.has_response: case SystemType.has_response:
// 处理有返回值的消息响应 // 处理有返回值的消息响应
@ -272,9 +280,9 @@ public class NettyServer {
// 处理设备上报的模型同步响应 // 处理设备上报的模型同步响应
if (null != root.element("Items").element("Item").attribute("device_file_path")) { 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.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 jsonObject = JSONObject.parseObject(json);
jsonObject.put("uuid", binaryModel.uuid); jsonObject.put("uuid", binaryModel.uuid);
jsonObject.put("Type", Constant.MODEL_UP_TYPE); jsonObject.put("Type", Constant.MODEL_UP_TYPE);
@ -283,81 +291,81 @@ public class NettyServer {
// 任务控制响应任务执行ID // 任务控制响应任务执行ID
if (null != root.element("Items").element("Item").attribute("task_patrolled_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.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 jsonObject = JSONObject.parseObject(json);
jsonObject.put("SendCode", ""); jsonObject.put("SendCode", "");
clientController.sendMsg(binaryModel.uuid, jsonObject.toJSONString()); clientController.sendMsg(binaryModel.uuid, jsonObject.toJSONString());
} }
} else { } else {
// 接收到的系统类信息报文中root:{},中不包含items或items中没有item,不予处理 // 接收到的系统类信息报文中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; break;
default: default:
// 接收到的系统类信息报文中command:{},不在处理范围内不予处理 // 接收到的系统类信息报文中command:{},不在处理范围内不予处理
logger.warn("######## 非法的消息不予处理, 客户: {}, 命令: {}, 消息体 ########\n{}", sendCode, command, xml);
logger.warn(Color.RED + "###### 非法的消息不予处理 ######" + Color.END);
} }
break; break;
case PushType.patrolDeviceState:// insert into basedata_mont_patdevstadata case PushType.patrolDeviceState:// insert into basedata_mont_patdevstadata
// json = downXml2Json.PatrolDeviceStateControlXml2Json(xml); // 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; break;
case PushType.patrolDeviceRunning:// insert into basedata_mont_patdevrundata case PushType.patrolDeviceRunning:// insert into basedata_mont_patdevrundata
// json = downXml2Json.PatrolDeviceRunningControlXml2Json(xml); // 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; break;
case PushType.nestState:// insert into basedata_mont_neststadata case PushType.nestState:// insert into basedata_mont_neststadata
// json = downXml2Json.NestStateControlXml2Json(xml); // 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; break;
case PushType.nestRunning:// insert into basedata_mont_nestrundata case PushType.nestRunning:// insert into basedata_mont_nestrundata
// json = downXml2Json.NestRunningControlXml2Json(xml); // 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; break;
case PushType.location:// insert into basedata_mont_patdevcoord case PushType.location:// insert into basedata_mont_patdevcoord
// json = downXml2Json.LocationControlXml2Json(xml); // 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; break;
case PushType.route:// insert into basedata_mont_patdevpatroute case PushType.route:// insert into basedata_mont_patdevpatroute
// json = downXml2Json.RouteControlXml2Json(xml); // 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; break;
case PushType.alarm:// insert into basedata_mont_patdevalmabn case PushType.alarm:// insert into basedata_mont_patdevalmabn
// json = down.AlarmControlXml2Json(xml); // 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; break;
case PushType.environment:// insert into basedata_mont_evndata case PushType.environment:// insert into basedata_mont_evndata
// json = downXml2Json.EnvironmentControlXml2Json(xml); // 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; break;
case PushType.taskState:// insert into basedata_mont_taskstadata and patrol_task_status case PushType.taskState:// insert into basedata_mont_taskstadata and patrol_task_status
// json = downXml2Json.TaskStateControlXml2Json(xml); // 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; break;
case PushType.result:// insert into basedata_mont_taskresult and patrol_task_result_main case PushType.result:// insert into basedata_mont_taskresult and patrol_task_result_main
// json = downXml2Json.TaskResultControlXml2Json(xml); // 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; break;
default: default:
// server-handle-接收到的type:{},不在处理范围内不予处理 // 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 != SystemType.system && !StringUtil.isNullOrEmpty(json)) {
if ((type == NestCtlType.courseReversal && command == 3)) { // 处理用SSCOM模拟的数据, 向无人机发送控制指令 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 { } else {
//rabbitmq推送到消息队列中基于springboot_xggd //rabbitmq推送到消息队列中基于springboot_xggd
JSONObject jsonObject = JSONObject.parseObject(json); JSONObject jsonObject = JSONObject.parseObject(json);
@ -366,7 +374,6 @@ public class NettyServer {
// send to BasedataMontDataMqAcceptHandle // send to BasedataMontDataMqAcceptHandle
rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json);
boolean isHost = json.contains(aliasHost); boolean isHost = json.contains(aliasHost);
logger.info("######## 会话: {}, 客户: {}, isHost: {}", binaryModel.uuid, sendCode, isHost);
sendResponseToDevice(binaryModel.uuid, receiveCode, sendCode, isHost); sendResponseToDevice(binaryModel.uuid, receiveCode, sendCode, isHost);
} }
} else { } else {
@ -374,11 +381,10 @@ public class NettyServer {
|| (type == NestCtlType.ptzPitch && command == 6) || (type == NestCtlType.ptzPitch && command == 6)
|| (type == NestCtlType.picModelSet && command == 1) || (type == NestCtlType.picModelSet && command == 1)
|| (type == NestCtlType.nestSuddenStop && command == 2)) {// 处理用SSCOM模拟的数据, 向无人机发送控制指令 || (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) { public void sendResponseToDevice(String uuid, String sendCode, String receiveCode, boolean isHost) {
@ -408,7 +414,6 @@ public class NettyServer {
xStream.addPermission(AnyTypePermission.ANY); xStream.addPermission(AnyTypePermission.ANY);
obj = (BaseControl) xStream.fromXML(xml); obj = (BaseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## 注册异常堆栈[PatrolHost] 会话: {}, {} ########", uuid, e.getMessage());
try { try {
XStream xStreamEx = getXmlStreamInstance(); XStream xStreamEx = getXmlStreamInstance();
xStreamEx.alias(aliasDevice, BaseControl.class); xStreamEx.alias(aliasDevice, BaseControl.class);
@ -417,7 +422,7 @@ public class NettyServer {
xStreamEx.addPermission(AnyTypePermission.ANY); xStreamEx.addPermission(AnyTypePermission.ANY);
obj = (BaseControl) xStreamEx.fromXML(xml); obj = (BaseControl) xStreamEx.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e2) { } 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); xStream.autodetectAnnotations(true);
xml = xStream.toXML(responseControl); xml = xStream.toXML(responseControl);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## DOWN REGISTER 解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage());
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasDevice, RegisterResponseControl.class); xStream.alias(aliasDevice, RegisterResponseControl.class);
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
xml = xStream.toXML(responseControl); xml = xStream.toXML(responseControl);
} catch (com.thoughtworks.xstream.XStreamException e2) { } 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); flushMsgToDevice(uuid, sendCode, false, xml);
} }
public void sendHeartBeat(final String uuid, String xml) { public void sendHeartBeat(final String uuid, String xml) {
logger.info("################ 设备端机器人系统心跳消息 ################\n{}", xml);
boolean isHost = true; boolean isHost = true;
BaseControl obj = new BaseControl(); BaseControl obj = new BaseControl();
try { try {
@ -526,7 +529,6 @@ public class NettyServer {
xStream.addPermission(AnyTypePermission.ANY); xStream.addPermission(AnyTypePermission.ANY);
obj = (BaseControl) xStream.fromXML(xml); obj = (BaseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## HEARTBEAT TO MQ 解析失败, 异常堆栈[PatrolHost]: {} ########", e.getMessage());
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasDevice, BaseControl.class); xStream.alias(aliasDevice, BaseControl.class);
@ -536,7 +538,7 @@ public class NettyServer {
obj = (BaseControl) xStream.fromXML(xml); obj = (BaseControl) xStream.fromXML(xml);
isHost = false; isHost = false;
} catch (com.thoughtworks.xstream.XStreamException e2) { } 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); xml = upJson2Xml.UpStreamJson2Xml(json, LinkageTaskControl.class);
break; break;
default: default:
logger.warn("################ 向设备端下发命令, 类型:{}错误, 不予处理 ################", type);
logger.warn(Color.RED + "###### 向设备端下发命令, 类型:{}错误, 不予处理 ######" + Color.END, type);
} }
if (!StringUtils.isEmpty(xml)) { if (!StringUtils.isEmpty(xml)) {
//logger.info("################ 向设备端下发命令 ################\n{}", xml);
//logger.info("###### 向设备端下发命令 ######\n{}", xml);
flushMsgToDevice("", receiveCode, true, xml); flushMsgToDevice("", receiveCode, true, xml);
} }
} }


+ 4
- 4
src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java View File

@ -23,7 +23,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
public void sendMsg(String uuid, String clientKey, String clientValue, ByteBuf byteBuf) { public void sendMsg(String uuid, String clientKey, String clientValue, ByteBuf byteBuf) {
if (ids.containsKey(clientValue)) { if (ids.containsKey(clientValue)) {
// ByteBuf forPrint = byteBuf.copy(); // 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); ids.get(clientValue).writeAndFlush(byteBuf);
} }
} }
@ -35,7 +35,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
public void channelActive(ChannelHandlerContext ctx) throws Exception { public void channelActive(ChannelHandlerContext ctx) throws Exception {
String id = ctx.channel().id().asShortText(); String id = ctx.channel().id().asShortText();
ids.put(id, ctx); 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 { public void channelInactive(ChannelHandlerContext ctx) throws Exception {
ctx.close(); ctx.close();
String id = ctx.channel().id().asShortText(); String id = ctx.channel().id().asShortText();
logger.warn("######## 设备断开: {} ########", id);
logger.warn("###### 设备断开:{} ######", id);
if (ids.containsKey(id)) { if (ids.containsKey(id)) {
ids.remove(id); ids.remove(id);
} }
@ -60,7 +60,7 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
String id = ctx.channel().id().asShortText(); String id = ctx.channel().id().asShortText();
BinaryModel binaryModel = (BinaryModel) msg; BinaryModel binaryModel = (BinaryModel) msg;
binaryModel.id = id; binaryModel.id = id;
logger.debug("######## 会话: {}, 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ########",
logger.debug("###### 会话:{}, 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ######",
binaryModel.uuid, binaryModel.uuid,
binaryModel.id, binaryModel.id,
binaryModel.sendIndex, binaryModel.sendIndex,


+ 2
- 2
src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java View File

@ -1,6 +1,7 @@
package com.inspect.tcpserver.tcp; package com.inspect.tcpserver.tcp;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.inspect.tcpserver.util.Color;
import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.naming.NoNameCoder; import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.Xpp3Driver; import com.thoughtworks.xstream.io.xml.Xpp3Driver;
@ -38,7 +39,6 @@ public class UpJson2Xml {
T obj = JSON.parseObject(json, clazz); T obj = JSON.parseObject(json, clazz);
return xStream.toXML(obj); return xStream.toXML(obj);
} catch (com.thoughtworks.xstream.XStreamException e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("######## UP解析失败, 异常堆栈 [PatrolHost]: {} ########", e.getMessage());
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
@ -46,7 +46,7 @@ public class UpJson2Xml {
T obj = JSON.parseObject(json, clazz); T obj = JSON.parseObject(json, clazz);
return xStream.toXML(obj); return xStream.toXML(obj);
} catch (com.thoughtworks.xstream.XStreamException ex) { } catch (com.thoughtworks.xstream.XStreamException ex) {
logger.error("######## UP解析失败[PatrolDevice] {} ########", ex.getMessage());
logger.error(Color.RED + "###### UpStreamJson2Xml解析失败:{} ######" + Color.END, ex.getMessage());
return null; return null;
} }
} }


Loading…
Cancel
Save