|  |  | 
 |  |  | 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; | 
 |  |  |  | 
 |  |  | 
 |  |  |     * 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 | 
 |  |  | 
 |  |  |                if(tcpSe.ioSession != null && tcpSe.ioSession.isConnected()){ | 
 |  |  |                   if(now - tcpSe.lastUpDataTimeForOnlineCtrl > ServerProperties.disconnectedByNoUpDataMinutes){ | 
 |  |  |                      tcpSe.ioSession.closeNow() ; | 
 |  |  |                      RtuLogDealer.log(entry.getKey(), "因较长时间未收上行数据,认为设备离线"); | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |             } |