Browse Source

/*日志里面增加uuid进行业务串接。*/

master
htjcAdmin 9 months ago
parent
commit
5aee05631c
7 changed files with 123 additions and 64 deletions
  1. +1
    -0
      src/main/java/com/inspect/tcpserver/tcp/BinaryModel.java
  2. +7
    -4
      src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java
  3. +4
    -1
      src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java
  4. +28
    -7
      src/main/java/com/inspect/tcpserver/tcp/NettyClient.java
  5. +78
    -47
      src/main/java/com/inspect/tcpserver/tcp/NettyServer.java
  6. +4
    -3
      src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java
  7. +1
    -2
      src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java

+ 1
- 0
src/main/java/com/inspect/tcpserver/tcp/BinaryModel.java View File

@ -9,4 +9,5 @@ public class BinaryModel {
public int dataLength; public int dataLength;
public ByteBuf dataBuf; public ByteBuf dataBuf;
public String id; public String id;
public String uuid;
} }

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

@ -19,13 +19,17 @@ public class DownXml2Json {
private String deviceAlias = "PatrolDevice"; private String deviceAlias = "PatrolDevice";
private XStream getXmlStreamInstance() {
return new XStream(new Xpp3Driver(new NoNameCoder()));
}
public DownXml2Json(String alias) { public DownXml2Json(String alias) {
this.alias = alias; this.alias = alias;
} }
public <T> String DownStreamJson2Xml(String id, String xml, Class<T> clazz) { public <T> String DownStreamJson2Xml(String id, String xml, Class<T> clazz) {
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
XStream xStream = getXmlStreamInstance();
xStream.alias(alias, clazz); xStream.alias(alias, clazz);
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements(); xStream.ignoreUnknownElements();
@ -33,8 +37,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 e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("################ 客户: {}, DOWN解析失败[PatrolHost] ################", id);
logger.error("################ 客户: {}, DOWN异常堆栈 ################\n{}", id, ExceptionUtils.getStackTrace(e));
logger.error("################ 客户: {}, UP解析失败, 异常堆栈 [PatrolHost]: {} ################", 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);
@ -53,7 +56,7 @@ public class DownXml2Json {
//任务下发 //任务下发
public String TaskSendControlXml2Json(String xml) { public String TaskSendControlXml2Json(String xml) {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
XStream xStream = getXmlStreamInstance();
xStream.alias(alias, TaskSendControl.class); xStream.alias(alias, TaskSendControl.class);
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements(); xStream.ignoreUnknownElements();


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

@ -5,6 +5,7 @@ import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder; import io.netty.handler.codec.ByteToMessageDecoder;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.tomcat.util.buf.HexUtils; import org.apache.tomcat.util.buf.HexUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -27,8 +28,9 @@ public class MyDecoder extends ByteToMessageDecoder {
in.skipBytes(in.readableBytes()); in.skipBytes(in.readableBytes());
} }
final String uuid = RandomStringUtils.randomAlphanumeric(32);
ByteBuf forPrint = in.copy(); ByteBuf forPrint = in.copy();
log.info("################ 客户: {}, 上行原始报文 ################ \n {}", 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;
@ -63,6 +65,7 @@ public class MyDecoder extends ByteToMessageDecoder {
binaryModel.sourceFlag = sourceFlag; binaryModel.sourceFlag = sourceFlag;
binaryModel.dataLength = xmlLength; binaryModel.dataLength = xmlLength;
binaryModel.dataBuf = Unpooled.copiedBuffer(payload); binaryModel.dataBuf = Unpooled.copiedBuffer(payload);
binaryModel.uuid = uuid;
out.add(binaryModel); out.add(binaryModel);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();


+ 28
- 7
src/main/java/com/inspect/tcpserver/tcp/NettyClient.java View File

@ -18,6 +18,7 @@ import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.CharsetUtil; import io.netty.util.CharsetUtil;
import io.netty.util.internal.StringUtil; import io.netty.util.internal.StringUtil;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.dom4j.Document; import org.dom4j.Document;
import org.dom4j.DocumentException; import org.dom4j.DocumentException;
import org.dom4j.Element; import org.dom4j.Element;
@ -312,17 +313,37 @@ public class NettyClient {
} }
} }
private XStream getXmlStreamInstance() {
return new XStream(new Xpp3Driver(new NoNameCoder()));
}
//处理注册应答 //处理注册应答
public void dealRegister(String xml) { public void dealRegister(String xml) {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(alias, RegisterResponseControl.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addPermission(AnyTypePermission.ANY);
RegisterResponseControl obj = (RegisterResponseControl) xStream.fromXML(xml);
RegisterResponseControl obj = new RegisterResponseControl();
try {
XStream xStream = getXmlStreamInstance();
xStream.alias(alias, RegisterResponseControl.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addPermission(AnyTypePermission.ANY);
obj = (RegisterResponseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("################ 注册解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(e));
try {
XStream xStream = getXmlStreamInstance();
xStream.alias(deviceAlias, RegisterResponseControl.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addPermission(AnyTypePermission.ANY);
obj = (RegisterResponseControl) xStream.fromXML(xml);
} catch (com.thoughtworks.xstream.XStreamException e2) {
logger.error("################ 解析失败[PatrolDevice] ################");
logger.error("################ 异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(e2));
}
}
TimerSendControl(obj); TimerSendControl(obj);
logger.info("客户端 接收到服务端注册回馈,服务注册完成");
logger.info("################ 客户端 接收到服务端注册回馈, 服务注册完成 ################ ");
} }
//处理心跳 //处理心跳


+ 78
- 47
src/main/java/com/inspect/tcpserver/tcp/NettyServer.java View File

@ -139,7 +139,7 @@ public class NettyServer {
} }
//发送消息 //发送消息
public void sendMsg(String client, boolean request, String xml) {
public void sendMsg(String uuid, String client, boolean request, String xml) {
if (tcpClientMap.containsKey(client) && !StringUtil.isNullOrEmpty(xml)) { if (tcpClientMap.containsKey(client) && !StringUtil.isNullOrEmpty(xml)) {
ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8); ByteBuf byteBuf = Unpooled.copiedBuffer(xml, CharsetUtil.UTF_8);
int length = byteBuf.readableBytes(); int length = byteBuf.readableBytes();
@ -154,11 +154,11 @@ 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);
nettyServerHandler.sendMsg(tcpClientMap.get(client), allBuf);
logger.info("################ 客户: {}, 向设备端机器人发送消息会话序列号: {}, 接收端序列号: {}, 消息体: ################\n{}", client, sendIndex, receiveIndex, xml);
logger.info("################ 会话: {}, 客户: {}, 向设备端机器人回送消息序列号: {}, 接收端序列号: {}, 消息体: ################\n{}", uuid, client, sendIndex, receiveIndex, xml);
nettyServerHandler.sendMsg(uuid, tcpClientMap.get(client), allBuf);
sendIndex++; sendIndex++;
} else { } else {
logger.warn("################ 设备端机器人: [{}] 离线!!! ################", client);
logger.warn("################ 会话: {}, 设备端机器人: [{}] 离线!!! ################", uuid, client);
} }
} }
@ -179,7 +179,7 @@ public class NettyServer {
String msg = redisTemplate.opsForValue().get(String.valueOf(sendIndex)); String msg = redisTemplate.opsForValue().get(String.valueOf(sendIndex));
if (!StringUtil.isNullOrEmpty(msg)) { if (!StringUtil.isNullOrEmpty(msg)) {
ByteBuf allBuf = Unpooled.copiedBuffer(msg, CharsetUtil.US_ASCII); ByteBuf allBuf = Unpooled.copiedBuffer(msg, CharsetUtil.US_ASCII);
sendMsg(sendCode, true, msg);
sendMsg("", sendCode, true, msg);
} }
} }
@ -201,7 +201,7 @@ public class NettyServer {
command = Integer.parseInt(root.element("Command").getText()); command = Integer.parseInt(root.element("Command").getText());
} }
logger.info("################ 客户: {}, 消息类型: {}, 消息体: ################ \n{}", binaryModel.id, type, xml);
logger.info("################ 会话: {}, 客户: {}, 消息类型: {}, 命令:{}, 消息体: ################ \n{}", binaryModel.uuid, binaryModel.id, type, command, xml);
//判断是否重发 //判断是否重发
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) {
@ -218,13 +218,13 @@ public class NettyServer {
switch (command) { switch (command) {
case SystemType.register_request: case SystemType.register_request:
// 收到接入侧注册信息 // 收到接入侧注册信息
logger.info("################ 客户: {}, 客户端注册信息 ################ \n {} ", binaryModel.id, xml);
dealRegister(xml);
logger.info("################ 会话: {}, 客户: {}, 客户端注册信息 ################", binaryModel.uuid, binaryModel.id);
dealRegister(binaryModel.uuid, xml);
break; break;
case SystemType.heart_request: case SystemType.heart_request:
// 处理心跳请求响应 // 处理心跳请求响应
logger.info("################ 客户: {}, 客户端心跳 ################ \n {} ", binaryModel.id, xml);
sendHeartBeat(xml);
logger.info("################ 会话: {}, 客户: {}, 客户端心跳 ################", binaryModel.uuid, binaryModel.id);
sendHeartBeat(binaryModel.uuid, xml);
break; break;
case SystemType.has_response: case SystemType.has_response:
// 处理有返回值的消息响应 // 处理有返回值的消息响应
@ -232,7 +232,7 @@ 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("################ 客户: {}, 客户端模型同步数据 ################ \n{}", binaryModel.id, xml);
logger.info("################ 会话: {}, 客户: {}, 客户端模型同步数据 ################", binaryModel.uuid, binaryModel.id);
// json = downXml2Json.ModelControlXml2Json(xml); // json = downXml2Json.ModelControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class);
JSONObject jsonObject = JSONObject.parseObject(json); JSONObject jsonObject = JSONObject.parseObject(json);
@ -242,7 +242,7 @@ 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("################ 客户: {}, 设备端任务下发或控制回复数据 ################\n{}", binaryModel.id, xml);
logger.info("################ 会话: {}, 客户: {}, 设备端任务下发或控制回复数据 ################", binaryModel.uuid, binaryModel.id);
// json = downXml2Json.ModelControlXml2Json(xml); // json = downXml2Json.ModelControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, ModelControl.class);
JSONObject jsonObject = JSONObject.parseObject(json); JSONObject jsonObject = JSONObject.parseObject(json);
@ -262,66 +262,66 @@ public class NettyServer {
case PushType.patrolDeviceState: case PushType.patrolDeviceState:
// json = downXml2Json.PatrolDeviceStateControlXml2Json(xml); // json = downXml2Json.PatrolDeviceStateControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceStateControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceStateControl.class);
logger.info("################ 客户: {}, 客户端设备状态数据 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备状态数据 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.patrolDeviceRunning: case PushType.patrolDeviceRunning:
// json = downXml2Json.PatrolDeviceRunningControlXml2Json(xml); // json = downXml2Json.PatrolDeviceRunningControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceRuningControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, PatrolDeviceRuningControl.class);
logger.info("################ 客户: {}, 客户端设备运行数据 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备运行数据 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.nestState: case PushType.nestState:
// json = downXml2Json.NestStateControlXml2Json(xml); // json = downXml2Json.NestStateControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestStateControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestStateControl.class);
logger.info("################ 客户: {}, 客户端机巢状态数据 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端机巢状态数据 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.nestRunning: case PushType.nestRunning:
// json = downXml2Json.NestRunningControlXml2Json(xml); // json = downXml2Json.NestRunningControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestRuningControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, NestRuningControl.class);
logger.info("################ 客户: {}, 客户端机巢运行数据 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端机巢运行数据 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.location: case PushType.location:
// json = downXml2Json.LocationControlXml2Json(xml); // json = downXml2Json.LocationControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, LocationControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, LocationControl.class);
logger.info("################ 客户: {}, 客户端设备坐标 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备坐标 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.route: case PushType.route:
// json = downXml2Json.RouteControlXml2Json(xml); // json = downXml2Json.RouteControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, RouteControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, RouteControl.class);
logger.info("################ 客户: {}, 客户端设备路线 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备路线 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.alarm: case PushType.alarm:
// json = down.AlarmControlXml2Json(xml); // json = down.AlarmControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, AlarmControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, AlarmControl.class);
logger.info("################ 客户: {}, 客户端设备异常告警 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备异常告警 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.environment: case PushType.environment:
// json = downXml2Json.EnvironmentControlXml2Json(xml); // json = downXml2Json.EnvironmentControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, EnvironmentControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, EnvironmentControl.class);
logger.info("################ 客户: {}, 客户端设备上报环境数据 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备上报环境数据 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.taskState: case PushType.taskState:
// json = downXml2Json.TaskStateControlXml2Json(xml); // json = downXml2Json.TaskStateControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskStateControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskStateControl.class);
logger.info("################ 客户: {}, 客户端设备任务状态 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端设备任务状态 ################", binaryModel.uuid, binaryModel.id);
break; break;
case PushType.result: case PushType.result:
// json = downXml2Json.TaskResultControlXml2Json(xml); // json = downXml2Json.TaskResultControlXml2Json(xml);
json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskResultControl.class); json = downXml2Json.DownStreamJson2Xml(binaryModel.id, xml, TaskResultControl.class);
logger.info("################ 客户: {}, 客户端巡视结果 ################ \n{}", binaryModel.id, json);
logger.info("################ 会话: {}, 客户: {}, 客户端巡视结果 ################", binaryModel.uuid, binaryModel.id);
break; break;
default: default:
// server-handle-接收到的type:{},不在处理范围内不予处理 // server-handle-接收到的type:{},不在处理范围内不予处理
logger.info("################ 客户: {}, 非法的消息不予处理, 类型{}, 消息体 ################ \n {}", binaryModel.id, type, xml);
logger.info("################ 会话: {}, 客户: {}, 非法的消息不予处理, 类型{}, 消息体 ################", binaryModel.id, type, xml);
} }
if (type != SystemType.system && !StringUtil.isNullOrEmpty(json)) { if (type != SystemType.system && !StringUtil.isNullOrEmpty(json)) {
//rabbitmq推送到消息队列中基于springboot_xggd //rabbitmq推送到消息队列中基于springboot_xggd
rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json); rabbitTemplate.convertAndSend(Constant.EX_CHANGE_NAME, Constant.ROUTING_KEY_NAME, json);
String receiveCode = root.element("ReceiveCode").getText(); String receiveCode = root.element("ReceiveCode").getText();
responseMsg(receiveCode, sendCode);
feedbackToDevice(binaryModel.uuid, receiveCode, sendCode);
} }
} }
public void responseMsg(String sendCode, String receiveCode) {
public void feedbackToDevice(String uuid, String sendCode, String receiveCode) {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasHost, ResponseControl.class); xStream.alias(aliasHost, ResponseControl.class);
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);
@ -334,11 +334,11 @@ public class NettyServer {
responseControl.Time = CommonUtils.GetNowDateString(); responseControl.Time = CommonUtils.GetNowDateString();
responseControl.Items = ""; responseControl.Items = "";
String xml = xStream.toXML(responseControl); String xml = xStream.toXML(responseControl);
sendMsg(receiveCode, false, xml);
sendMsg(uuid, receiveCode, false, xml);
} }
//处理注册应答 //处理注册应答
public void dealRegister(String xml) {
public void dealRegister(String uuid, String xml) {
BaseControl obj = new BaseControl(); BaseControl obj = new BaseControl();
try { try {
XStream xStream = getXmlStreamInstance(); XStream xStream = getXmlStreamInstance();
@ -348,8 +348,7 @@ 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] ################");
logger.error("################ 异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(e));
logger.error("################ 注册解析失败, 异常堆栈[PatrolHost] {} ################", e.getMessage());
try { try {
XStream xStreamEx = getXmlStreamInstance(); XStream xStreamEx = getXmlStreamInstance();
xStreamEx.alias(aliasDevice, BaseControl.class); xStreamEx.alias(aliasDevice, BaseControl.class);
@ -387,9 +386,9 @@ public class NettyServer {
} }
responseControl.Items.add(model); responseControl.Items.add(model);
// 推送消息到mq // 推送消息到mq
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("uuid", uuid);
jsonObject.put("patroldevice_code", obj.SendCode); jsonObject.put("patroldevice_code", obj.SendCode);
jsonObject.put("Type", "heartbeat"); jsonObject.put("Type", "heartbeat");
jsonObject.put("eventType", "connect"); jsonObject.put("eventType", "connect");
@ -400,7 +399,7 @@ public class NettyServer {
// 鉴权不通过 // 鉴权不通过
responseControl.Code = ResponseType.fault; responseControl.Code = ResponseType.fault;
} }
sendRegisterResponse(responseControl, obj.SendCode);
sendRegisterResponse(uuid, responseControl, obj.SendCode);
} }
private XStream getXmlStreamInstance() { private XStream getXmlStreamInstance() {
@ -434,26 +433,58 @@ public class NettyServer {
} }
public void sendRegisterResponse(RegisterResponseControl responseControl, String sendCode) {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasHost, RegisterResponseControl.class);
xStream.autodetectAnnotations(true);
String xml = xStream.toXML(responseControl);
sendMsg(sendCode, false, xml);
public void sendRegisterResponse(String uuid, RegisterResponseControl responseControl, String sendCode) {
String xml = "";
try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasHost, RegisterResponseControl.class);
xStream.autodetectAnnotations(true);
xml = xStream.toXML(responseControl);
} catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("################ DOWN REGISTER 解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(e));
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));
}
}
sendMsg(uuid, sendCode, false, xml);
} }
public void sendHeartBeat(String xml) {
logger.info("[NETTY] 设备端机器人系统心跳消息: {}", xml);
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasHost, BaseControl.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
xStream.addPermission(AnyTypePermission.ANY);
BaseControl obj = (BaseControl) xStream.fromXML(xml);
responseMsg(obj.ReceiveCode, obj.SendCode);
public void sendHeartBeat(final String uuid, String xml) {
//logger.info("################ 设备端机器人系统心跳消息 ################\n{}", xml);
BaseControl obj = new BaseControl();
try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.alias(aliasHost, BaseControl.class);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
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);
xStream.autodetectAnnotations(true);
xStream.ignoreUnknownElements();
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));
}
}
feedbackToDevice(uuid, obj.ReceiveCode, obj.SendCode);
// 推送消息到mq // 推送消息到mq
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("uuid", uuid);
jsonObject.put("SendCode", obj.SendCode); jsonObject.put("SendCode", obj.SendCode);
jsonObject.put("Type", "heartbeat"); jsonObject.put("Type", "heartbeat");
jsonObject.put("eventType", "heart"); jsonObject.put("eventType", "heart");
@ -519,7 +550,7 @@ public class NettyServer {
} }
if (!StringUtils.isEmpty(xml)) { if (!StringUtils.isEmpty(xml)) {
logger.info("################ 向设备端下发命令 ################\n{}", xml); logger.info("################ 向设备端下发命令 ################\n{}", xml);
sendMsg(receiveCode, true, xml);
sendMsg("", receiveCode, true, xml);
} }
} }
} }

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

@ -20,10 +20,10 @@ public class NettyServerHandler extends ChannelInboundHandlerAdapter {
this.nettyServer = nettyServer; this.nettyServer = nettyServer;
} }
public void sendMsg(String id, ByteBuf byteBuf) {
public void sendMsg(String uuid, String id, ByteBuf byteBuf) {
if (ids.containsKey(id)) { if (ids.containsKey(id)) {
ByteBuf forPrint = byteBuf.copy(); ByteBuf forPrint = byteBuf.copy();
logger.info("################ 客户: {}, 下行原始报文 ################\n [{}]", id, ByteBufUtil.hexDump(forPrint));
logger.info("################ 会话: {}, 客户: {}, 下行原始报文 ################\n [{}]", uuid, id, ByteBufUtil.hexDump(forPrint));
ids.get(id).writeAndFlush(byteBuf); ids.get(id).writeAndFlush(byteBuf);
} }
} }
@ -60,7 +60,8 @@ 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.info("################ 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ################",
logger.debug("################ 会话: {}, 客户:{}, 客户序列号:{}, 服务序列号:{}, 长度:{} ################",
binaryModel.uuid,
binaryModel.id, binaryModel.id,
binaryModel.sendIndex, binaryModel.sendIndex,
binaryModel.receiveIndex, binaryModel.receiveIndex,


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

@ -39,8 +39,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 e) { } catch (com.thoughtworks.xstream.XStreamException e) {
logger.error("################ UP解析失败[PatrolHost] ################");
logger.error("################ UP异常堆栈 ################\n{}", ExceptionUtils.getStackTrace(e));
logger.error("################ UP解析失败, 异常堆栈 [PatrolHost]: {} ################", ExceptionUtils.getMessage(e));
try { try {
XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder())); XStream xStream = new XStream(new Xpp3Driver(new NoNameCoder()));
xStream.autodetectAnnotations(true); xStream.autodetectAnnotations(true);


Loading…
Cancel
Save