From 7df8ed14d605bcc731341ff12349bc117714b69e Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期四, 17 四月 2025 16:18:24 +0800
Subject: [PATCH] 优化代码
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java | 187 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 187 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java
new file mode 100644
index 0000000..be8798f
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpSessionCacheBk.java
@@ -0,0 +1,187 @@
+package com.dy.rtuMw.server.forTcp;
+
+import com.dy.rtuMw.server.ServerProperties;
+import org.apache.mina.core.session.IoSession;
+
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.util.*;
+import java.util.Map.Entry;
+
+/**
+ * 鐢℉ashtable瀹炵幇锛屼絾瀹炴祴鍙戠幇Hashtable骞朵笉绾跨▼瀹夊叏
+ */
+public class TcpSessionCacheBk {
+
+ /**
+ * 鐢℉ashtable鑰屼笉鐢℉ashMap鍘熷洜锛�
+ * Hashtable绾跨▼瀹夊叏鐨�
+ * HashMap绾跨▼涓嶅畨鍏ㄧ殑
+ * 澶氱嚎绋嬪sessionTable璇诲嚭鎴栧瓨鍏ワ紝鍙兘浜х敓寮傚父
+ * TcpSessionCache鏄湪澶氱嚎绋嬬幆澧冧笅杩愯
+ */
+ private static Hashtable<String, TcpSession> sessionTable = new Hashtable<String, TcpSession>() ;
+
+ /**
+ * 鍔犲叆鏂扮殑IoSession
+ * @param rtuAddr
+ * @param protocolName
+ * @param ioSession
+ */
+ public static void putNewTcpSession(String rtuAddr, String protocolName, IoSession ioSession){
+ TcpSession tcpSe = sessionTable.get(rtuAddr) ;
+ if(tcpSe == null){
+ tcpSe = new TcpSession() ;
+ tcpSe.ioSession = ioSession ;
+ sessionTable.put(rtuAddr, tcpSe) ;
+ }else{
+ tcpSe.ioSession = ioSession ;
+ }
+ }
+
+ /**
+ * 鏇存柊IoSession瀵瑰簲鐨剅tuAddr
+ * @param oldRtuAddr
+ * @param newRtuAddr
+ * @param protocolName
+ * @param ioSession
+ */
+ public static void changeRtuAddr(String oldRtuAddr, String newRtuAddr, String protocolName, IoSession ioSession){
+ if(oldRtuAddr != null && newRtuAddr != null && !oldRtuAddr.equals(newRtuAddr)){
+ TcpSession tcpSe = sessionTable.get(oldRtuAddr) ;
+ if(tcpSe == null){
+ putNewTcpSession(newRtuAddr, protocolName, ioSession) ;
+ }else{
+ sessionTable.remove(oldRtuAddr) ;
+ sessionTable.put(newRtuAddr, tcpSe) ;
+ }
+ }
+ }
+
+ /**
+ * 寰楀埌TcpSession
+ * @param rtuAddr
+ * @return
+ */
+ public static TcpSession getTcpSession(String rtuAddr){
+ return sessionTable.get(rtuAddr) ;
+ }
+
+
+ /**
+ * 寰楀埌鎵�鏈夊湪绾挎儏鍐�
+ * @return
+ */
+ public static HashMap<String, Boolean> allOnLine(){
+ HashMap<String, Boolean> map = new HashMap<String, Boolean>();
+ Iterator<Entry<String, TcpSession>> it = sessionTable.entrySet().iterator() ;
+ Entry<String, TcpSession> entry = null ;
+ while(it.hasNext()){
+ entry = it.next() ;
+ map.put(entry.getKey(), entry.getValue().ioSession.isConnected()) ;
+ }
+ return map ;
+ }
+ /**
+ * 寰楀埌鎵�鏈塕TU杩炴帴鐘舵�佹儏鍐�
+ * @return
+ */
+// public static List<RtuSessionStatus> allConnectStatus(){
+// List<RtuSessionStatus> list = new ArrayList<RtuSessionStatus>();
+// Iterator<Entry<String, TcpSession>> it = sessionTable.entrySet().iterator() ;
+// Entry<String, TcpSession> entry = null ;
+// while(it.hasNext()){
+// entry = it.next() ;
+// RtuSessionStatus vo = new RtuSessionStatus() ;
+// vo.rtuAddr = entry.getKey() ;
+// IoSession se = entry.getValue().ioSession ;
+// vo.onTrueOffLine = se.isConnected() ;
+// InetSocketAddress sa = (InetSocketAddress)se.getRemoteAddress() ;
+// if(sa != null){
+// InetAddress inetAddr = sa.getAddress() ;
+// if(inetAddr != null){
+// vo.ip = inetAddr.getHostAddress() ;
+// vo.port = sa.getPort() ;
+// }
+// }
+// list.add(vo) ;
+// }
+// return list ;
+// }
+
+
+ /**
+ * 寰楀埌IoSession
+ * @param rtuAddr
+ * @return
+ */
+// public IoSession getIoSession(String rtuAddr){
+// TcpSession tcpSe = sessionMap.get(rtuAddr) ;
+// if(tcpSe != null){
+// return tcpSe.ioSession ;
+// }
+// return null ;
+// }
+
+ /**
+ * 缃戠粶鏄惁杩炴帴
+ * @param rtuAddr
+ * @return
+ */
+ public static Boolean isConnect(String rtuAddr){
+ TcpSession tcpSe = sessionTable.get(rtuAddr) ;
+ if(tcpSe != null){
+ return tcpSe.ioSession.isConnected() ;
+ }
+ return null ;
+ }
+
+ /**
+ * 閫氳繃IoSession杈撳嚭鏁版嵁
+ * @param rtuAddr
+ * @param data
+ * @throws Exception
+ */
+ public static void write(String rtuAddr, byte[] data) throws Exception{
+ TcpSession tcpSe = sessionTable.get(rtuAddr) ;
+ if(tcpSe != null){
+ if(tcpSe.ioSession.isConnected()){
+ tcpSe.ioSession.write(data) ;
+ }else{
+ throw new Exception("Rtu杩炴帴宸茬粡鍏抽棴!") ;
+ }
+ }else{
+ throw new Exception("Rtu鏈浘涓婄嚎!") ;
+ }
+ }
+
+ /**
+ * 璁剧疆涓婅鏁版嵁鏃跺埢
+ * @param rtuAddr
+ */
+ public static void cacheUpDataTime(String rtuAddr){
+ TcpSession tcpSe = sessionTable.get(rtuAddr) ;
+ if(tcpSe != null){
+ tcpSe.lastUpDataTime = System.currentTimeMillis() ;
+ }
+ }
+
+ /**
+ * 鏇存柊涓婅鏁版嵁鏃跺埢
+ * 褰撲笂琛屾暟鎹椂鍒诲凡缁忚繃鍘讳竴瀹氭椂闀匡紝涓婅鏁版嵁鏃跺埢娓呯┖
+ */
+ public static void updateUpDataTime(Long now){
+ Iterator<TcpSession> it = sessionTable.values().iterator() ;
+ TcpSession tcpSe = null ;
+ while(it.hasNext()){
+ tcpSe = it.next() ;
+ if(tcpSe.lastUpDataTime != null){
+ if(now - tcpSe.lastUpDataTime > ServerProperties.lastUpDataTimeLive){
+ tcpSe.lastUpDataTime = null ;
+ }
+ }
+ }
+ }
+
+
+}
--
Gitblit v1.8.0