BingShuiGpsServerHandler.java 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package com.tidecloud.dataacceptance.service.impl;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.context.annotation.Scope;
  9. import org.springframework.stereotype.Component;
  10. import com.tidecloud.dataacceptance.service.HexBinaryAcceptanceHandlerAdapter;
  11. import io.netty.buffer.ByteBuf;
  12. import io.netty.buffer.Unpooled;
  13. import io.netty.channel.Channel;
  14. import io.netty.channel.ChannelFuture;
  15. import io.netty.channel.ChannelHandler;
  16. import io.netty.util.concurrent.Future;
  17. import io.netty.util.concurrent.GenericFutureListener;
  18. /**
  19. * @author cdk
  20. */
  21. @Component
  22. @Scope("prototype")
  23. @ChannelHandler.Sharable
  24. public class BingShuiGpsServerHandler extends HexBinaryAcceptanceHandlerAdapter {
  25. private static final Logger logger = LoggerFactory.getLogger(BingShuiGpsServerHandler.class);
  26. public void handle(String oringalData, Channel channel) {
  27. }
  28. @Override
  29. protected void handle(ByteBuf in, Channel channel) throws Exception {
  30. ByteBuf byteBuf = (ByteBuf) in;
  31. String oringalData = byteBufferToString(byteBuf.nioBuffer());
  32. logger.info("接入数据:{}", oringalData);
  33. Map<String, String> dataMap = new HashMap<>();
  34. String[] dataArray = oringalData.split("\\s+");
  35. String phone = dataArray[0];
  36. String deviceData = dataArray[1];
  37. if (deviceData.endsWith("]") && deviceData.startsWith("[")) {
  38. String subDeviceData = deviceData.substring(1, deviceData.length() - 1);
  39. String[] subDataArray = subDeviceData.split(";");
  40. try {
  41. for (int i = 0; i < subDataArray.length; i++) {
  42. String subData = subDataArray[i];
  43. String[] datas = subData.split(":");
  44. if (datas[0].contains("S") && !datas[0].contains("G")) {
  45. dataMap.put("S", datas[1]);
  46. } else {
  47. dataMap.put(datas[0], datas[1]);
  48. }
  49. }
  50. } catch (Exception e) {
  51. logger.error(e.getMessage(), e);
  52. }
  53. }
  54. byte[] dataByteArray = new byte[in.readableBytes()];
  55. in.readBytes(dataByteArray);
  56. sendMsg2Kafka(dataByteArray,phone,channel);
  57. String serialStr = dataMap.get("S");
  58. Integer serialId = Integer.valueOf(serialStr) + 1;
  59. Date now = new Date();
  60. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  61. String dataStr = simpleDateFormat.format(now);
  62. String replyMsg = "[" + "S:" + serialId + ";R" + "1" + ";" + "ST:" + dataStr + "]";
  63. ByteBuf buffer = Unpooled.buffer(replyMsg.getBytes().length);
  64. buffer.writeBytes(replyMsg.getBytes());
  65. ChannelFuture channelFuture = channel.writeAndFlush(buffer);
  66. channelFuture.addListener(new GenericFutureListener<Future<? super Void>>() {
  67. @Override
  68. public void operationComplete(Future<? super Void> future) throws Exception {
  69. logger.info("回复设备: [{}] 成功", replyMsg);
  70. }
  71. });
  72. }
  73. }