liurunyu
4 天以前 e7efb53cd598bef3413944f294bfffcb1f65f5e9
完善代码
9个文件已修改
1个文件已删除
1个文件已添加
88 ■■■■ 已修改文件
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrKeys.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/DataDecoder.java
@@ -29,7 +29,7 @@
     */
    @Override
    protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) {
        String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
        String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr) ;
        if(rtuAddr == null){
            //会话未被管理
            //会话管理器中不存在此会话,说明刚建立网络连接,
@@ -56,8 +56,8 @@
        PrefixedDataAvailableStatus dataStatus = this.pdaHandle.forOnLine(session, in) ;
        if(dataStatus.protocolName != null && dataStatus.protocolVersion != null){
            session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, dataStatus.protocolName) ;
            session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion, dataStatus.protocolVersion) ;
            session.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, dataStatus.protocolName) ;
            session.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion, dataStatus.protocolVersion) ;
        }
        if(dataStatus.isCompleted() || dataStatus.isAdjoined()){
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrIdIsRtuAddr.java
File was deleted
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpIoSessionAttrKeys.java
New file
@@ -0,0 +1,13 @@
package com.dy.common.mw.channel.tcp;
/**
 * TCP Session中放入的属性的ID就是水表号
 * 当应用rtuMw时用到,应用aepMw时用不到
 *
 */
public class TcpIoSessionAttrKeys {
    public static final String sessionAttrRtuAddr = "key_rtuAddr" ; //这个key存储的是Rtu地址
    public static final String sessionAttrProtocolName = "key_pName" ; //这个key存储的是Rtu协议名称
    public static final String sessionAttrProtocolVersion = "key_pVerson" ; //这个key存储的是Rtu协议版本号
}
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/channel/tcp/TcpUnit.java
@@ -40,9 +40,9 @@
     * @throws Exception
     */
    public void setIoSessionArrs(IoSession session, String rtuAddr, String protocolName, Short protocolVersion) throws Exception {
        session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddr) ;
        session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, protocolName) ;
        session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion, protocolVersion) ;
        session.setAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr, rtuAddr) ;
        session.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, protocolName) ;
        session.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion, protocolVersion) ;
    }
    @Override
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/PrefixedDataAvailableHandleImp.java
@@ -3,7 +3,7 @@
import java.util.Collection;
import java.util.HashMap;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.buffer.IoBuffer;
@@ -34,8 +34,8 @@
                PrefixedDataAvailable pda = null ;
                //从会话缓存得到上次上行数据确定的协议
                String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
                Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
                String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName) ;
                Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion) ;
                //由会话中的协议得到处理类
                //利用缓存的协议,进而对不符合协议的上行数据也能用该协议处理了,例如RTU采用不同数据协议的嵌入式软件升级协议
                //即RTU第一包数据确定下来协议,后面数据都用这个协议处理,那么数据可以变化了,可以不符合第一包数据遵守的协议了
@@ -114,8 +114,8 @@
                PrefixedDataAvailable pda = null ;
                //从会话缓存得到上次上行数据确定的协议
                String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
                Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
                String protocolName = (String) ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName) ;
                Short protocolVersion = (Short) ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion) ;
                //由会话中的协议得到处理类
                Object[] objs =  this.getClassObjAndAnnotationVo(protocolName, protocolVersion) ;
                if(objs != null && objs[0] != null && objs[1] != null){
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V1/CommonV1.java
@@ -1,11 +1,9 @@
package com.dy.common.mw.protocol.p206V1;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.ByteUtilUnsigned;
import com.dy.common.util.CRC16;
import com.dy.common.util.CRC8_for_2_0;
import org.apache.mina.core.session.IoSession;
public class CommonV1 {
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V2/CommonV2.java
@@ -1,6 +1,6 @@
package com.dy.common.mw.protocol.p206V2;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import com.dy.common.mw.protocol.p206V1.ProtocolConstantV206V1;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.ByteUtilUnsigned;
@@ -16,8 +16,8 @@
     * @param ioSession 会话
     */
    public void setThisProtocolArr2IoSession(IoSession ioSession){
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V1.protocolVer) ;
        ioSession.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, ProtocolConstantV206V1.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, ProtocolConstantV206V1.protocolVer) ;
    }
    /**
     * 检查头
pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mw/protocol/p206V202404/CommonV202404.java
@@ -1,6 +1,6 @@
package com.dy.common.mw.protocol.p206V202404;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import com.dy.common.util.ByteUtil;
import com.dy.common.util.ByteUtilUnsigned;
@@ -16,8 +16,8 @@
     * @param ioSession 会话
     */
    public void setThisProtocolArr2IoSession(IoSession ioSession){
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V202404.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName, ProtocolConstantV206V202404.protocolVer) ;
        ioSession.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, ProtocolConstantV206V202404.protocolName) ;
        ioSession.setAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName, ProtocolConstantV206V202404.protocolVer) ;
    }
    /**
     * 检查头
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpIoSessionCallback.java
@@ -4,7 +4,7 @@
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.session.IoSession;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import com.dy.common.mw.channel.tcp.TcpIoSessionEventCallback;
import com.dy.common.mw.core.CoreUnit;
import com.dy.rtuMw.server.tasks.RtuUpTask;
@@ -19,7 +19,7 @@
    public void sessionOpened(IoSession session) throws Exception {
        log.info("网络连接建立,终端网址是:" + session.getRemoteAddress().toString()) ;
        if(session != null) {
            String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr);
            String rtuAddr = (String) session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr);
            if(rtuAddr != null && !rtuAddr.trim().equals("")){
                RtuLogDealer.log(rtuAddr, "网络接入");
            }
@@ -32,7 +32,7 @@
    @Override
    public void sessionClosed(IoSession session) throws Exception {
        if(session != null){
             String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
             String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr) ;
             if(rtuAddr != null && !rtuAddr.trim().equals("")){
                 //记录状态
@@ -49,7 +49,7 @@
     */
    public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
        if(session != null && cause != null){
            String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
            String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr) ;
            log.error("网络会话发生异常,"
                    + (rtuAddr==null?"":("终端地址是:" + rtuAddr))
                    + (session==null?"":(session.getRemoteAddress() != null?(",终端网址是:" + session.getRemoteAddress().toString()):""))
@@ -61,7 +61,7 @@
     * TCP通道发送完数据后,回调的方法,进行后续数据处理
     */
    public void messageSended(IoSession session, Object message) throws Exception  {
          String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
          String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr) ;
        log.info("网络发送了数据,"
                + (rtuAddr==null?"":("终端地址是:" + rtuAddr))
                + (session==null?"":(session.getRemoteAddress() != null?(",终端网址是:" + session.getRemoteAddress().toString()):"")) );
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -3,7 +3,7 @@
import java.util.*;
import java.util.Map.Entry;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import org.apache.mina.core.session.IoSession;
import com.dy.rtuMw.server.ServerProperties;
@@ -118,8 +118,8 @@
        TcpSession tcpSe = map.get(rtuAddr) ;
        if(tcpSe != null){
            return new Object[]{
                    tcpSe.ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName),
                    tcpSe.ioSession.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion)};
                    tcpSe.ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName),
                    tcpSe.ioSession.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion)};
        }else{
            return null ;
        }
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/tasks/RtuUpTask.java
@@ -11,7 +11,7 @@
import org.apache.logging.log4j.Logger;
import org.apache.mina.core.session.IoSession;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrKeys;
import com.dy.common.mw.channel.tcp.TcpUnit;
import com.dy.common.mw.core.CoreTask;
import com.dy.rtuMw.server.ServerProperties;
@@ -55,9 +55,9 @@
            e.printStackTrace();
            log.error("将数据转换为十六进制时出错!" ) ;
        }
        String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr) ;
        String protocolName = (String)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolName) ;
        Short protocolVersion = (Short)session.getAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrProtocolVersion) ;
        String rtuAddr = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr) ;
        String protocolName = (String)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolName) ;
        Short protocolVersion = (Short)session.getAttribute(TcpIoSessionAttrKeys.sessionAttrProtocolVersion) ;
        boolean isOnLine = false ;
        if(rtuAddr == null){
            //说明刚建立网络连接,此数据应该是上线数据
@@ -191,7 +191,7 @@
                    if(rtuAddrInData != null && !rtuAddrInData.equals(rtuAddrAtHead)){
                        //数据头中的RTU地址与数据中的RTU地址不一致,更换成数据中的RTU地址
                        TcpSessionCache.changeRtuAddr(rtuAddrAtHead, rtuAddrInData, session);
                        session.setAttribute(TcpIoSessionAttrIdIsRtuAddr.sessionArrRtuAddr, rtuAddrInData) ;
                        session.setAttribute(TcpIoSessionAttrKeys.sessionAttrRtuAddr, rtuAddrInData) ;
                    }
                    String rtuAddr ;