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 ;