liurunyu
2024-09-14 6f9b4c38d47b697941115cc4f7b42a66a028f8fc
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCache.java
@@ -5,6 +5,7 @@
import java.util.*;
import java.util.Map.Entry;
import com.dy.common.mw.channel.tcp.TcpIoSessionAttrIdIsRtuAddr;
import com.dy.common.util.DateTime;
import org.apache.mina.core.session.IoSession;
@@ -23,7 +24,43 @@
    * 2023-12-19实测,发现Hashtable并不线程安全,所以应用了HashMap和synchronized
    */
   private static HashMap<String, TcpSession> sessionTable = new HashMap<String, TcpSession>() ;
   /**
    * 得到信息
    * @return
    */
   public static Integer[] info(){
      Integer rtuTotalConnect = 0 ;//已经连接过中间件的RTU总数(包括在线与离线的)
      Integer rtuTotalOnLine = 0 ;//在线RTU总数
      Integer rtuTotalOffLine = 0 ;//离线RTU总数
      synchronized (sessionTable){
         rtuTotalConnect = sessionTable.size() ;
         Collection<TcpSession> col = sessionTable.values() ;
         for(TcpSession se : col){
            if(se.ioSession.isConnected()){
               rtuTotalOnLine ++ ;
            }else{
               rtuTotalOffLine ++ ;
            }
         }
      }
      return new Integer[] {rtuTotalConnect, rtuTotalOnLine, rtuTotalOffLine} ;
   }
   /**
    * 关闭所有网络连接
    */
   public static void closeAllSessions(){
      synchronized (sessionTable){
         Collection<TcpSession> col = sessionTable.values() ;
         for(TcpSession se : col){
            se.ioSession.closeNow() ;
         }
         sessionTable.clear();
      }
   }
   /**
    * 加入新的IoSession
    * @param rtuAddr
@@ -214,6 +251,7 @@
               if(tcpSe.ioSession != null && tcpSe.ioSession.isConnected()){
                  if(now - tcpSe.lastUpDataTimeForOnlineCtrl > ServerProperties.disconnectedByNoUpDataMinutes){
                     tcpSe.ioSession.closeNow() ;
                     RtuLogDealer.log(entry.getKey(), "因较长时间未收上行数据,认为设备离线");
                  }
               }
            }