From 3a97ed3e03c8969aef34d172bf46116596683bd3 Mon Sep 17 00:00:00 2001 From: CZT <czt18638530771@163.com> Date: 星期三, 27 九月 2023 21:50:00 +0800 Subject: [PATCH] 贝博粮情解析2 --- igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java | 20 -- igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java | 50 +++++ igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java | 2 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java | 36 ++++ igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java | 61 ++++++ igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java | 16 + igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java | 20 +- igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java | 60 ++++++ igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java | 65 +++++++ /dev/null | 6 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java | 41 ++++ igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java | 7 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java | 15 igds-web/src/main/resources/READ-INFO.properties | 3 igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java | 1 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java | 4 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java | 6 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java | 110 ++++++++++++ 18 files changed, 468 insertions(+), 55 deletions(-) diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java new file mode 100644 index 0000000..d4dbabd --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java @@ -0,0 +1,36 @@ +package com.ld.igds.protocol.beibo; + +import com.ld.igds.data.ConfigData; +import com.ld.igds.protocol.beibo.grainv1.server.BeiboGrainV1ServerEngine; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.CommandLineRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +/** + * 閰嶇疆闅忕郴缁熻嚜鍔ㄥ惎鍔ㄦ湇鍔� -- 鎵ц椤哄簭20-29 + */ +@Component(ServerRunner.BEAN_ID) +@Order(value = 25) +public class ServerRunner implements CommandLineRunner { + + public static final String BEAN_ID = "beibo.serverRunnerV1"; + + @Autowired + private ConfigData configData; + + @Autowired + private BeiboGrainV1ServerEngine beiboGrainV1ServerEngine; + + @Override + public void run(String... strings) throws Exception { + + if (configData.getActive().indexOf("pro") >= 0) { + + beiboGrainV1ServerEngine.start(BeiboGrainV1ServerEngine.PORT); + } + if (configData.getActive().indexOf("dev") >= 0) { + beiboGrainV1ServerEngine.start(BeiboGrainV1ServerEngine.PORT); + } + } +} diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java deleted file mode 100644 index 1dc5ca5..0000000 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.ld.igds.protocol.beibo.grain; - -import com.ld.igds.constant.RedisConst; -import com.ld.igds.io.RemoteGrainService; -import com.ld.igds.io.constant.OrderRespEnum; -import com.ld.igds.io.constant.ProtocolEnum; -import com.ld.igds.io.request.CheckGrainRequest; -import com.ld.igds.io.response.GrainResponse; -import com.ld.igds.protocol.beibo.grain.builder.CommandBuild; -import com.ld.igds.protocol.beibo.grain.client.BeiboClientEngine; -import com.ld.igds.util.BytesUtil; -import com.ld.igds.util.RedisUtil; -import com.ld.io.api.InvokeResult; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -/** - * 璐濆崥绮儏鍒嗘満鍗忚 - * - * @author czt - */ -@Slf4j -@Component(RemoteGrainServiceImpl.BEAN_ID) -public class RemoteGrainServiceImpl implements RemoteGrainService { - - public static final String BEAN_ID = "beiboGrain.remoteGrainService"; - - @Autowired - private RedisUtil redisUtil; - - @Override - public String getProtocol() { - return ProtocolEnum.TCP_BEIBO_GRAIN_V1.getCode(); - } - - @Override - public GrainResponse checkGrain(CheckGrainRequest request) { - try { - log.info("璐濆崥绮儏鍒嗘満寮�濮嬫娴嬶紝鍒嗘満{}鐨処P={},绔彛={}", request.getSerId(), request.getIp(), request.getPort()); - BeiboClientEngine beibo = new BeiboClientEngine(request.getIp(), request.getPort()); - beibo.start(); - Thread.sleep(3000); - - //鐢熸垚绮儏鍛戒护 - String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId()); - - InvokeResult result = beibo.send(BytesUtil.hexStrToBytes(hexStr)); - - log.info("result=" + result.getMessage()); - - // 灏佽杩斿洖淇℃伅 - if (InvokeResult.SUCCESS == result) { - String key = RedisConst.buildKey(request.getCompanyId(), "GRAIN_BEIBO"); - redisUtil.set(key, request.getDepotId()); - return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), - "绮儏绮儏鍙戦�佹垚鍔燂紒"); - } else { - log.error("骞冲彴------>>>>璐濆崥绮儏鍒嗘満锛氱伯鎯呮娴�-澶辫触{}", result.getMessage()); - return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), - "鍛戒护鍙戦�佸紓甯革細" + result.getMessage()); - } - - } catch (Exception e) { - log.error("绮儏妫�娴嬪紓甯革細{}", e); - return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庣寮傚父锛�" + e.getMessage()); - } - } -} \ No newline at end of file diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java deleted file mode 100644 index cf5b4a3..0000000 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java +++ /dev/null @@ -1,6 +0,0 @@ -/** - * 璐濆崥绮儏鍗忚-鍒嗘満涓烘湇鍔$ - */ -package com.ld.igds.protocol.beibo.grain; - - diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java new file mode 100644 index 0000000..f2269d8 --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java @@ -0,0 +1,60 @@ +package com.ld.igds.protocol.beibo.grainv1; + +import com.ld.igds.io.RemoteGrainService; +import com.ld.igds.io.constant.OrderRespEnum; +import com.ld.igds.io.constant.ProtocolEnum; +import com.ld.igds.io.request.CheckGrainRequest; +import com.ld.igds.io.response.GrainResponse; +import com.ld.igds.protocol.beibo.grainv1.builder.CommandBuild; +import com.ld.igds.protocol.beibo.grainv1.server.BeiboGrainV1ServerEngine; +import com.ld.io.api.InvokeResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 璐濆崥绮儏鍒嗘満鍗忚 + * + * @author czt + */ +@Slf4j +@Component(RemoteGrainServiceImpl.BEAN_ID) +public class RemoteGrainServiceImpl implements RemoteGrainService { + + public static final String BEAN_ID = "beiboGrain.remoteGrainService"; + + @Autowired + private BeiboGrainV1ServerEngine beiboGrainV1ServerEngine; + + @Override + public String getProtocol() { + return ProtocolEnum.TCP_BEIBO_GRAIN_V1.getCode(); + } + + @Override + public GrainResponse checkGrain(CheckGrainRequest request) { + try { + //鐢熸垚绮儏鍛戒护 + String hexStr = CommandBuild.getInstance().getMsgCheck(request.getSerId()); + + // 鍙戦�佸懡浠� + InvokeResult result = beiboGrainV1ServerEngine.pushByMin(hexStr); + + log.error("骞冲彴------>>>>鍒嗘満锛氱伯鎯呮娴�-{}", hexStr); + + // 灏佽杩斿洖淇℃伅 + if (InvokeResult.SUCCESS == result) { + return new GrainResponse(OrderRespEnum.ORDER_SUCCESS.getCode(), + "绮儏閲囬泦鍛戒护鍙戦�佹垚鍔燂紒"); + } else { + log.error("骞冲彴------>>>>鍒嗘満锛氱伯鎯呮娴�-澶辫触{}", result.getMessage()); + return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), + "鍛戒护鍙戦�佸紓甯革細" + result.getMessage()); + } + + } catch (Exception e) { + log.error("绮儏妫�娴嬪紓甯革細{}", e); + return new GrainResponse(OrderRespEnum.ORDER_ERROR.getCode(), "鍚庣寮傚父锛�" + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/analysis/AnalysisService.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java similarity index 98% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/analysis/AnalysisService.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java index 0191804..297fd5c 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/analysis/AnalysisService.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java @@ -1,4 +1,4 @@ -package com.ld.igds.protocol.beibo.grain.analysis; +package com.ld.igds.protocol.beibo.grainv1.analysis; import com.ld.igds.common.CoreCommonService; import com.ld.igds.common.CoreSerService; @@ -15,9 +15,9 @@ import com.ld.igds.models.Grain; import com.ld.igds.order.ExeOrderService; import com.ld.igds.order.data.ExeRequest; -import com.ld.igds.protocol.beibo.grain.builder.ReMessage; -import com.ld.igds.protocol.beibo.grain.builder.ReMessageBuilder; -import com.ld.igds.protocol.beibo.grain.util.BeiboGrainServerUtils; +import com.ld.igds.protocol.beibo.grainv1.builder.ReMessage; +import com.ld.igds.protocol.beibo.grainv1.builder.ReMessageBuilder; +import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils; import com.ld.igds.util.BytesUtil; import com.ld.igds.util.ContextUtil; import com.ld.igds.warn.WarnUtils; @@ -25,7 +25,6 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.util.*; /** @@ -52,7 +51,6 @@ @Autowired private ExeOrderService exeOrderService; - public static Map<String, Map<String, String>> contextMap = new HashMap<>(); public static double ERROR_CHECK_TAG = -100.0; @@ -67,17 +65,17 @@ /** * 00000000FFEB90FEAA 41 E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF * - * @param result + * @param hexStr */ - public void analysis(String result) { + public void analysis(String ip, int port, String hexStr) { - log.info("鍒嗘満------->>骞冲彴锛氫俊鎭姤鏂�={}", result); - ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(result); + ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(hexStr); + + log.info("鍒嗘満------->>骞冲彴锛氫俊鎭姤鏂�={}", reMessage); if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) { log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr()); } - //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅 DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId()); diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/CommandBuild.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java similarity index 90% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/CommandBuild.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java index 816574a..7002fcf 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/CommandBuild.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java @@ -1,6 +1,6 @@ -package com.ld.igds.protocol.beibo.grain.builder; +package com.ld.igds.protocol.beibo.grainv1.builder; -import com.ld.igds.protocol.beibo.grain.util.BeiboGrainServerUtils; +import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils; import com.ld.igds.util.BytesUtil; /** diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessage.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java similarity index 85% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessage.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java index 70b81c2..1d6821a 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessage.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java @@ -1,4 +1,4 @@ -package com.ld.igds.protocol.beibo.grain.builder; +package com.ld.igds.protocol.beibo.grainv1.builder; import lombok.Data; import java.util.Date; @@ -12,6 +12,11 @@ @Data public class ReMessage { + + private String ip; + + private int port; + private String startStr; //璧峰绗� private String serId; //鍒嗘満鍦板潃 diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessageBuilder.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java similarity index 60% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessageBuilder.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java index 9491a6f..eccf5be 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/builder/ReMessageBuilder.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java @@ -1,6 +1,6 @@ -package com.ld.igds.protocol.beibo.grain.builder; +package com.ld.igds.protocol.beibo.grainv1.builder; -import com.ld.igds.protocol.beibo.grain.util.BeiboGrainServerUtils; +import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils; import com.ld.igds.util.BytesUtil; /** @@ -35,22 +35,6 @@ int i = BytesUtil.hexToInt(str); String serId = String.valueOf(i - BeiboGrainServerUtils.BM); message.setSerId(serId); - - //绮儏鏁版嵁 - str = strMsg.substring(10*2-1, 1034*2 -1); - message.setGrainStr(str); - - //娓╁害鏁版嵁 - str = strMsg.substring(1034*2 -1, 1052*2-1); - message.setThStr(str); - - //鎵╁厖鏁版嵁 - str = strMsg.substring(strMsg.length()-14*2, strMsg.length()-4*2); - message.setExpand(str); - - //妫�楠岀爜 - str = strMsg.substring(strMsg.length()-4*2); - message.setHexCrc16(str); return message; } diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/BeiboClientEngine.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java similarity index 85% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/BeiboClientEngine.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java index b4d65e2..de79179 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/BeiboClientEngine.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java @@ -1,4 +1,4 @@ -package com.ld.igds.protocol.beibo.grain.client; +package com.ld.igds.protocol.beibo.grainv1.client; import com.ld.igds.util.BytesUtil; import com.ld.io.api.InvokeResult; @@ -10,6 +10,8 @@ import io.netty.channel.socket.oio.OioSocketChannel; import io.netty.handler.codec.bytes.ByteArrayDecoder; import io.netty.handler.codec.bytes.ByteArrayEncoder; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; /** * 璐濆崥绮儏鍗忚锛屽垎鏈轰负鏈嶅姟绔紝骞冲彴涓哄鎴风涓诲姩杩炴帴 @@ -17,6 +19,8 @@ * @author czt */ public class BeiboClientEngine implements Runnable { + + private final InternalLogger log = InternalLoggerFactory.getInstance(this.getClass()); private String host; private int port; @@ -44,14 +48,14 @@ public void startRun() throws Exception { EventLoopGroup group = new OioEventLoopGroup(); Bootstrap b = new Bootstrap(); - // b.option(ChannelOption.SO_KEEPALIVE, true); +// b.option(ChannelOption.SO_KEEPALIVE, true); b.group(group).channel(OioSocketChannel.class) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); - // 瀛楃涓茶В鐮� 鍜� 缂栫爜 + // 瀛楃涓茶В鐮佸拰缂栫爜 p.addLast("decoder", new ByteArrayDecoder()); p.addLast("encoder", new ByteArrayEncoder()); // 鑷繁鐨勯�昏緫Handler @@ -62,15 +66,15 @@ // 鍙戣捣寮傛杩炴帴璇锋眰锛岀粦瀹氳繛鎺ョ鍙e拰host淇℃伅 ChannelFuture channelFuture = b.connect(host, port); this.channel = channelFuture.channel(); - // channelFuture.channel().closeFuture().sync(); +// channelFuture.channel().closeFuture().sync(); channelFuture.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture arg0) throws Exception { if (channelFuture.isSuccess()) { - System.out.println("杩炴帴鏈嶅姟鍣ㄦ垚鍔�"); + log.info("杩炴帴鏈嶅姟鍣ㄦ垚鍔�"); } else { - System.out.println("杩炴帴鏈嶅姟鍣ㄥけ璐�"); + log.info("杩炴帴鏈嶅姟鍣ㄥけ璐�"); channelFuture.cause().printStackTrace(); group.shutdownGracefully(); // 鍏抽棴绾跨▼缁� } diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/ClientHandler.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java similarity index 72% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/ClientHandler.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java index 9fdb924..4d97ce2 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/client/ClientHandler.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java @@ -1,13 +1,12 @@ -package com.ld.igds.protocol.beibo.grain.client; +package com.ld.igds.protocol.beibo.grainv1.client; -import com.ld.igds.protocol.beibo.grain.analysis.AnalysisService; +import com.ld.igds.protocol.beibo.grainv1.analysis.AnalysisService; import com.ld.igds.util.BytesUtil; import com.ld.igds.util.SpringUtil; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.util.internal.logging.InternalLogger; import io.netty.util.internal.logging.InternalLoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import java.net.InetSocketAddress; @@ -25,7 +24,7 @@ public void channelActive(ChannelHandlerContext ctx) { InetSocketAddress insocket = (InetSocketAddress) ctx.channel() .remoteAddress(); - log.info("璐濆崥绮儏鍒嗘満鎴愬姛杩炴帴锛孖P={},port={}", insocket.getAddress() + log.info("鍒嗘満鎴愬姛杩炴帴锛孖P={},port={}", insocket.getAddress() .getHostAddress(), insocket.getPort()); } @@ -36,7 +35,7 @@ InetSocketAddress insocket = (InetSocketAddress) ctx.channel() .remoteAddress(); - log.info("璐濆崥绮儏鍒嗘満鏂紑杩炴帴锛孖P={},port={}", insocket.getAddress(),insocket.getPort()); + log.info("鍒嗘満鏂紑杩炴帴锛孖P={},port={}", insocket.getAddress(),insocket.getPort()); } @Override @@ -44,15 +43,15 @@ throws Exception { byte[] bytes = (byte[]) msg; String result = BytesUtil.bytesToString(bytes); - log.info("璐濆崥绮儏鍒嗘満杩斿洖淇℃伅=" + result); + log.info("鍒嗘満杩斿洖淇℃伅=" + result); - InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress(); +// InetSocketAddress insocket = (InetSocketAddress) ctx.channel().remoteAddress(); //瑙f瀽 if (null == analysisService) { analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID); } - analysisService.analysis(result); +// analysisService.analysis(result); } @Override diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java new file mode 100644 index 0000000..e752e77 --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java @@ -0,0 +1,6 @@ +/** + * 璐濆崥绮儏鍗忚-鍒嗘満涓烘湇鍔$ + */ +package com.ld.igds.protocol.beibo.grainv1; + + diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java new file mode 100644 index 0000000..5827efb --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java @@ -0,0 +1,41 @@ +package com.ld.igds.protocol.beibo.grainv1.server; + +import com.ld.io.api.HeartbeatProvider; +import com.ld.io.api.IoSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * 鎻愪緵蹇冭烦淇℃伅 + * + * @author czt + */ +@Slf4j +@Service +public class BeiboGrainV1HeartbeatImpl implements HeartbeatProvider { + + @Override + public byte[] provide(IoSession session) { + + + //鐩存帴鏍规嵁涓绘満SESSIOn鍒ゆ柇 + IoSession session1 = BeiboGrainV1ServerUtils.getSession(); + + Long lastBeatTime = BeiboGrainV1ServerUtils.getHearBeat(session1); + + if (null == lastBeatTime) { + return null; + } + + //濡傛灉鏈�鍚庝竴娆$粓绔績璺虫椂闂磋窛绂诲綋鍓嶆椂闂村ぇ浜� 缁堢蹇冭烦鏃堕棿鐨�3娆★紝鍒欏垽鏂负绂荤嚎 + long deTime = System.currentTimeMillis() - lastBeatTime; + + if (deTime > (BeiboGrainV1ServerUtils.HEART_BEAT_TIME * 3 * 1000)) { + log.info("-----------瓒呰繃{}绉掓湭鑾峰彇鍒板績璺充俊鎭紝鍒ゅ畾缁堢绂荤嚎锛岃涪鍑鸿繛鎺�------------{}-{}", deTime, session.getAddress(), session.getPort()); + + session.destroy(); + } + + return null; + } +} diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java new file mode 100644 index 0000000..b3df71c --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java @@ -0,0 +1,50 @@ +package com.ld.igds.protocol.beibo.grainv1.server; + +import com.ld.igds.protocol.beibo.grainv1.analysis.AnalysisService; +import com.ld.igds.util.BytesUtil; +import com.ld.io.api.IoMsgConsumer; +import com.ld.io.api.IoSession; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + */ +@Slf4j +@Service +public class BeiboGrainV1MessageConsumer implements IoMsgConsumer { + + + @Autowired + private AnalysisService analysisService; + + /** + * 澶勭悊娑堟伅 + * + * @param ioSession + * @param bytes + */ + @Override + public void consume(IoSession ioSession, byte[] bytes) { + if (null == bytes) { + log.error("Reply bytes is null"); + return; + } + + //娣诲姞淇℃伅蹇冭烦鏍囪 + BeiboGrainV1ServerUtils.addHeartBeat(ioSession); + + //榛樿璁剧疆涓婚�氳鏈嶅姟 + BeiboGrainV1ServerUtils.addSession(ioSession); + + try { + String hexStr = BytesUtil.bytesToString(bytes); + log.info("涓绘満杩斿洖鎶ユ枃------->>骞冲彴锛�" + hexStr); + + analysisService.analysis(ioSession.getAddress(), ioSession.getPort(), hexStr); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } +} \ No newline at end of file diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java new file mode 100644 index 0000000..8b14e90 --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java @@ -0,0 +1,110 @@ +package com.ld.igds.protocol.beibo.grainv1.server; + +import com.ld.igds.util.BytesUtil; +import com.ld.io.api.*; +import com.ld.io.netty.NettyServer; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @Desc: 璐濆崥绮儏鍗忚-涓插彛鏈嶅姟鍣ㄥ鎴风 + * @author: czt + * @update-time: 2023/09/27 + */ +@Slf4j +@Service +public class BeiboGrainV1ServerEngine { + + public static final Integer PORT = 9311; + + @Autowired + private BeiboGrainV1MessageConsumer defaultMessageConsumer; + @Autowired + private BeiboGrainV1SessionListener defaultSessionListener; + // 蹇冭烦鎻愪緵 + private static HeartbeatProvider heartbeatProvider = new BeiboGrainV1HeartbeatImpl(); + + private IoSessionQuery sessionQuery; + + public void start(Integer port) { + IoServerOption ioServerOption = new IoServerOption(); + + if (null != port) { + ioServerOption.setPort(port); + } else { + ioServerOption.setPort(PORT); + } + ioServerOption.setSplitDecoderType(SplitByteDecoderType.NO_LIMIT); +// //纭缁撳熬鏍囧織 +// ioServerOption.setDelimiter(); + + // 閰嶇疆绯荤粺蹇冭烦闂撮殧 + ioServerOption.setReaderIdleTime(5 * 60); + + NettyServer ioServer = new NettyServer(ioServerOption, defaultMessageConsumer, defaultSessionListener, heartbeatProvider); + ioServer.startup(); + + sessionQuery = ioServer.getSessionQuery(); + + + log.info("* "); + log.info("* ========================"); + log.info("* "); + log.info("* [GRAIN-SERVER锛欱EIBO_GRAIN,PORT={}]", PORT); + log.info("* "); + log.info("* ========================"); + log.info("* "); + + System.out.println("* ========================"); + System.out.println("* "); + System.out.println("* [GRAIN-SERVER锛欱EIBO_GRAIN,PORT={}]" + port); + System.out.println("* "); + System.out.println("* ========================"); + } + + public IoSessionQuery getSessionQuery() { + return sessionQuery; + } + + /** + * 鍙戦�佷俊鎭� + * + * @param ip + * @param port + * @param msg + * @return + */ + public InvokeResult push(String ip, int port, byte[] msg) { + IoSessionQuery sessionFactory = getSessionQuery(); + List<IoSession> sessions = sessionFactory.getAllSession(); + IoSession session = null; + for (IoSession ioSession : sessions) { + if (BeiboGrainV1ServerUtils.getServerKey(ip, port).equals(ioSession.getBusinessKey())) { + session = ioSession; + break; + } + } + if (null == session) { + return InvokeResult.CHANNEL_CLOSED; + } + return session.invoke(msg); + } + + /** + * 鐩存帴浣跨敤鍐呭瓨鐨凷ession鎵ц + */ + public InvokeResult pushByMin(String hexStr) { + + IoSession session = BeiboGrainV1ServerUtils.getSession(); + + if (null == session) { + return InvokeResult.CHANNEL_CLOSED; + } + byte[] msg = BytesUtil.hexStrToBytes(hexStr); + return session.invoke(msg); + } + +} \ No newline at end of file diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java new file mode 100644 index 0000000..a7b5f73 --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java @@ -0,0 +1,65 @@ +package com.ld.igds.protocol.beibo.grainv1.server; + + +import com.ld.igds.util.BytesUtil; +import com.ld.io.api.IoSession; + +import java.util.HashMap; +import java.util.Map; + +/** + * 宸ュ叿绫� + * + * @author vince + */ +public class BeiboGrainV1ServerUtils { + + + /** + * 璁板綍姣忎釜杩炴帴鐨勬渶鍚庝竴娆′俊鎭椂闂� key = 杩炴帴鐨凨YE锛宒ata =褰撳墠鏃堕棿鎴� + */ + public static Map<String, Long> contextMapHeart = new HashMap<>(); + + public static Map<String, IoSession> contextIoSession = new HashMap<>(); + + + public static int HEART_BEAT_TIME = 30;//蹇冭烦闂撮殧鏃堕棿 + + /** + * 閽堝鏃犵嚎绮儏涓绘満鐨勯粯璁D閰嶇疆 + */ + public static String DEFAULT_MAC_ID = "6550"; + + /** + * 鐢熸垚TCP杩炴帴鐨凨EY + * + * @param ip + * @param port + * @return + */ + public static String getServerKey(String ip, Integer port) { + return ip + ":" + port; + } + + + /** + * 娣诲姞鏈�鏂板績璺虫椂闂存埑 + * + * @param session + */ + public static void addHeartBeat(IoSession session) { + contextMapHeart.put(getServerKey(session.getAddress(), session.getPort()), System.currentTimeMillis()); + } + + public static Long getHearBeat(IoSession session) { + return contextMapHeart.get(getServerKey(session.getAddress(), session.getPort())); + } + + public static void addSession(IoSession session) { + contextIoSession.put(DEFAULT_MAC_ID, session); + } + + public static IoSession getSession() { + return contextIoSession.get(DEFAULT_MAC_ID); + } +} diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java new file mode 100644 index 0000000..6a759cb --- /dev/null +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java @@ -0,0 +1,61 @@ +package com.ld.igds.protocol.beibo.grainv1.server; + +import com.ld.igds.common.CoreSerService; +import com.ld.igds.constant.Constant; +import com.ld.igds.models.DeviceSer; +import com.ld.igds.util.ContextUtil; +import com.ld.io.api.IoSession; +import com.ld.io.api.IoSessionListener; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * + */ +@Slf4j +@Service +public class BeiboGrainV1SessionListener implements IoSessionListener { + + @Autowired + private CoreSerService coreSerService; + /** + * 璁惧鍒涘缓鍦ㄧ嚎锛岄渶瑕佹敞鎰忓綋鍓嶄娇鐢ㄤ富鏈烘ā寮忥紝涓绘満涓婄嚎榛樿鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄤ笂绾� + * + * @param session + */ + @Override + public void onCreate(IoSession session) { + + //娣诲姞鍒板唴瀛� + BeiboGrainV1ServerUtils.addSession(session); + + log.info("++++鏂板缓杩炴帴++++-IP={}锛孭ORT={}", session.getAddress(), session.getPort()); + + // 娣诲姞鑷畾涔変笟鍔D + session.setBusinessKey(BeiboGrainV1ServerUtils.getServerKey(session.getAddress(), session.getPort())); + + //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶� + DeviceSer deviceSer = coreSerService.getCacheSerBySn(ContextUtil.getDefaultCompanyId(), BeiboGrainV1ServerUtils.DEFAULT_MAC_ID); + if (null == deviceSer) return; + coreSerService.onlineBySn(session.getAddress(), session.getPort(), deviceSer.getSn(), Constant.YN_Y); + //鏇存柊缂撳瓨 + coreSerService.refreshCache(deviceSer.getCompanyId()); + } + + /** + * 娉ㄦ剰锛屽綋鍓嶉噰鐢ㄤ富鏈烘ā寮忥紝涓绘満绂荤嚎鎵�鏈夌浉鍚孲N閰嶇疆鐨勫垎鏈哄叏閮ㄧ绾� + * + * @param session + */ + @Override + public void onDestroy(IoSession session) { + log.info("----杩炴帴鏂紑-----IP={}锛孭ORT={}", session.getAddress(), session.getPort()); + + //椤圭洰閲囩敤鏃犵嚎涓绘満妯″紡锛岀洿鎺ヨ幏鍙栭粯璁よ澶� + DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BeiboGrainV1ServerUtils.DEFAULT_MAC_ID); + + if (null == deviceSer) return; + + } +} diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/util/BeiboGrainServerUtils.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java similarity index 84% rename from igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/util/BeiboGrainServerUtils.java rename to igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java index 4380b66..281c048 100644 --- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/util/BeiboGrainServerUtils.java +++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java @@ -1,4 +1,4 @@ -package com.ld.igds.protocol.beibo.grain.util; +package com.ld.igds.protocol.beibo.grainv1.util; /** * 宸ュ叿绫� diff --git a/igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java b/igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java index 018f342..831de3d 100644 --- a/igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java +++ b/igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java @@ -8,7 +8,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutorService; diff --git a/igds-web/src/main/resources/READ-INFO.properties b/igds-web/src/main/resources/READ-INFO.properties index 1904cac..e9bc34a 100644 --- a/igds-web/src/main/resources/READ-INFO.properties +++ b/igds-web/src/main/resources/READ-INFO.properties @@ -9,4 +9,5 @@ # 9307 ---制氮机控制网关协议 # 9308 ---气象站对外TCP协议 # 9309 ---邦海智能纯粮情协议 -# 9310 ---邦海智能控制柜协议 \ No newline at end of file +# 9310 ---邦海智能控制柜协议 +# 9311 ---贝博粮情客户端协议 \ No newline at end of file -- Gitblit v1.9.3