CZT
2023-09-27 3a97ed3e03c8969aef34d172bf46116596683bd3
贝博粮情解析2
已重命名7个文件
已删除2个文件
已添加8个文件
已修改2个文件
592 ■■■■ 文件已修改
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/ServerRunner.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/RemoteGrainServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/package-info.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1HeartbeatImpl.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1MessageConsumer.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerEngine.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1ServerUtils.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/server/BeiboGrainV1SessionListener.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-protocol-zldz/src/main/java/com/ld/igds/protocol/zldz/task/CommandReSendService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
igds-web/src/main/resources/READ-INFO.properties 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
        }
    }
}
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/RemoteGrainServiceImpl.java
ÎļþÒÑɾ³ý
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/package-info.java
ÎļþÒÑɾ³ý
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());
        }
    }
}
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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("分机------->>平台,解析粮情失败:报文起始符={}错误,不解析", reMessage.getStartStr());
        }
        //根据分机地址获取分机信息
        DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId());
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/CommandBuild.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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;
/**
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessage.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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;     //分机地址
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/builder/ReMessageBuilder.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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;
    }
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/BeiboClientEngine.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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 @@
        // å‘起异步连接请求,绑定连接端口和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(); // å…³é—­çº¿ç¨‹ç»„
                }
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/client/ClientHandler.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/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("贝博粮情分机成功连接,IP={},port={}", insocket.getAddress()
        log.info("分机成功连接,IP={},port={}", insocket.getAddress()
                .getHostAddress(), insocket.getPort());
    }
@@ -36,7 +35,7 @@
        InetSocketAddress insocket = (InetSocketAddress) ctx.channel()
                .remoteAddress();
        log.info("贝博粮情分机断开连接,IP={},port={}", insocket.getAddress(),insocket.getPort());
        log.info("分机断开连接,IP={},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();
        //解析
        if (null == analysisService) {
            analysisService = (AnalysisService) SpringUtil.getBean(AnalysisService.BEAN_ID);
        }
        analysisService.analysis(result);
//        analysisService.analysis(result);
    }
    @Override
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;
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;
    }
}
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);
        }
    }
}
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:BEIBO_GRAIN,PORT={}]", PORT);
        log.info("* ");
        log.info("* ========================");
        log.info("* ");
        System.out.println("* ========================");
        System.out.println("* ");
        System.out.println("* [GRAIN-SERVER:BEIBO_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);
    }
    /**
     * ç›´æŽ¥ä½¿ç”¨å†…存的Session执行
     */
    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);
    }
}
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 = è¿žæŽ¥çš„KYE,data =当前时间戳
     */
    public static Map<String, Long> contextMapHeart = new HashMap<>();
    public static Map<String, IoSession> contextIoSession = new HashMap<>();
    public static int HEART_BEAT_TIME = 30;//心跳间隔时间
    /**
     * é’ˆå¯¹æ— çº¿ç²®æƒ…主机的默认ID配置
     */
    public static String DEFAULT_MAC_ID = "6550";
    /**
     * ç”ŸæˆTCP连接的KEY
     *
     * @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);
    }
}
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;
    /**
     * è®¾å¤‡åˆ›å»ºåœ¨çº¿ï¼Œéœ€è¦æ³¨æ„å½“前使用主机模式,主机上线默认所有相同SN配置的分机全部上线
     *
     * @param session
     */
    @Override
    public void onCreate(IoSession session) {
        //添加到内存
        BeiboGrainV1ServerUtils.addSession(session);
        log.info("++++新建连接++++-IP={},PORT={}", session.getAddress(), session.getPort());
        // æ·»åŠ è‡ªå®šä¹‰ä¸šåŠ¡ID
        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());
    }
    /**
     * æ³¨æ„ï¼Œå½“前采用主机模式,主机离线所有相同SN配置的分机全部离线
     *
     * @param session
     */
    @Override
    public void onDestroy(IoSession session) {
        log.info("----连接断开-----IP={},PORT={}", session.getAddress(), session.getPort());
        //项目采用无线主机模式,直接获取默认设备
        DeviceSer deviceSer = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), BeiboGrainV1ServerUtils.DEFAULT_MAC_ID);
        if (null == deviceSer) return;
    }
}
igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/util/BeiboGrainServerUtils.java
ÎļþÃû´Ó igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grain/util/BeiboGrainServerUtils.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.ld.igds.protocol.beibo.grain.util;
package com.ld.igds.protocol.beibo.grainv1.util;
/**
 * å·¥å…·ç±»
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;
igds-web/src/main/resources/READ-INFO.properties
@@ -9,4 +9,5 @@
# 9307 ---制氮机控制网关协议
# 9308 ---气象站对外TCP协议
# 9309 ---邦海智能纯粮情协议
# 9310 ---邦海智能控制柜协议
# 9310 ---邦海智能控制柜协议
# 9311 ---贝博粮情客户端协议