| | |
| | | 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(), "因较长时间未收上行数据,认为设备离线"); |
| | | } |
| | | } |
| | | } |