Browse Source

/*屏蔽上级系统发送,调整日志打印。*/

master
htjcAdmin 9 months ago
parent
commit
9bcd09c822
9 changed files with 119 additions and 109 deletions
  1. +4
    -4
      src/main/java/com/inspect/tcpserver/controller/ClientController.java
  2. +3
    -4
      src/main/java/com/inspect/tcpserver/tcp/DownXml2Json.java
  3. +2
    -2
      src/main/java/com/inspect/tcpserver/tcp/MyDecoder.java
  4. +39
    -41
      src/main/java/com/inspect/tcpserver/tcp/NettyClient.java
  5. +1
    -1
      src/main/java/com/inspect/tcpserver/tcp/NettyClientHandler.java
  6. +50
    -47
      src/main/java/com/inspect/tcpserver/tcp/NettyServer.java
  7. +7
    -7
      src/main/java/com/inspect/tcpserver/tcp/NettyServerHandler.java
  8. +2
    -3
      src/main/java/com/inspect/tcpserver/tcp/UpJson2Xml.java
  9. +11
    -0
      src/main/java/com/inspect/tcpserver/util/Color.java

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

@ -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, "数据格式不正确");
}
}


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

@ -27,7 +27,7 @@ public class DownXml2Json {
this.alias = alias;
}
public <T> String DownStreamJson2Xml(String id, String xml, Class<T> clazz) {
public <T> String DownStreamJson2Xml(String uuid, String id, String xml, Class<T> 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;
}
}


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

@ -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;


+ 39
- 41
src/main/java/com/inspect/tcpserver/tcp/NettyClient.java View File

@ -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);
}
}
}


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

@ -61,7 +61,7 @@ public class NettyClientHandler extends ChannelInboundHandlerAdapter {
Context = ctx;
try {
nettyClient.SendRegister();
nettyClient.sendRegisterToUpper();
} catch (Exception e) {
e.printStackTrace();
throw e;


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

@ -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);
}
}


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

@ -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,


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

@ -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;
}
}


+ 11
- 0
src/main/java/com/inspect/tcpserver/util/Color.java View File

@ -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";
}

Loading…
Cancel
Save