From de2b2506dfce3641d28c8f016019cdf8f744dc42 Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期三, 07 五月 2025 15:07:00 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV
---
pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java
new file mode 100644
index 0000000..bae9ac6
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/forTcp/TcpDownCommandCache.java
@@ -0,0 +1,152 @@
+package com.dy.rtuMw.server.forTcp;
+
+
+import com.dy.common.queue.Node;
+import com.dy.common.queue.Queue;
+import com.dy.common.mw.protocol.MidResultFromRtu;
+import com.dy.common.mw.protocol.MidResultToRtu;
+import com.dy.rtuMw.server.ServerProperties;
+
+/**
+ * 闈炵嚎绋嬪畨鍏ㄧ殑锛屽彧鑳藉湪鍗曠嚎绋嬩腑杩愯
+ */
+public class TcpDownCommandCache {
+
+ //TCP涓嬭鍛戒护缂撳瓨闃熷垪
+ private static Queue cacheQueue = new Queue("tcpDownCommandQueue") ;
+
+ private static TcpDownCommandCache instance = new TcpDownCommandCache() ;
+
+ private TcpDownCommandCache(){
+ cacheQueue.setLimit(ServerProperties.cacheUpDownDataWarnCount, ServerProperties.cacheUpDownDataMaxCount);
+ }
+
+ public static TcpDownCommandCache getInstance(){
+ return instance ;
+ }
+
+
+ public static Integer[] info(){
+ Integer comTotalDown = 0 ;//缂撳瓨鐨勪笅琛屽懡浠ゆ�绘暟
+ Integer comNoResTotalDownByOnLine = 0 ;//RTU鍦ㄧ嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+ Integer comNoResTotalDownByOffLine = 0 ;//RTU绂荤嚎锛屼絾瀵瑰叾涓嬭鍛戒护鏈敹鍒板簲绛旂殑鎬绘暟
+ MidResultToRtu res ;
+ TcpDownCommandObj obj ;
+ Node node = cacheQueue.getFirstNode() ;
+ while(node != null && node.obj != null){
+ obj = (TcpDownCommandObj)node.obj;
+ res = obj.result ;
+ if(!obj.onceReceivedResult){
+ comTotalDown ++ ;
+ if(TcpSessionCache.isConnect(res.rtuAddr)){
+ comNoResTotalDownByOnLine ++ ;
+ }else{
+ comNoResTotalDownByOffLine ++ ;
+ }
+ }
+ }
+ return new Integer[]{comTotalDown, comNoResTotalDownByOnLine, comNoResTotalDownByOffLine} ;
+ }
+
+ /**
+ * 缂撳瓨鍛戒护
+ * @param result
+ * @throws Exception
+ */
+ public static void cacheCommand(MidResultToRtu result) throws Exception{
+ if(result != null){
+ if(result.maxSendTimes == null){
+ //璁剧疆鏈�澶у彂閫佹鏁�
+ result.maxSendTimes = ServerProperties.downComandMaxResendTimes ;
+ }
+ if(result.isSendFirst){
+ cacheQueue.pushHead(new TcpDownCommandObj(result));
+ }else{
+ cacheQueue.pushTail(new TcpDownCommandObj(result));
+ }
+ }
+ }
+
+ /**
+ * 鍖归厤鍛戒护缁撴灉
+ * @param rsFromRtu
+ * @return
+ */
+ public static MidResultToRtu matchFromHead(MidResultFromRtu rsFromRtu){
+ MidResultToRtu res = null ;
+ TcpDownCommandObj obj = null ;
+ Node node = cacheQueue.getFirstNode() ;
+ while(node != null && node.obj != null){
+ obj = (TcpDownCommandObj)node.obj;
+ res = obj.result ;
+ if(res != null
+ && res.rtuAddr.equals(rsFromRtu.rtuAddr)
+ && res.downCode.equals(rsFromRtu.upCode)){
+ obj.onceReceivedResult = true ;//鏍囪瘑宸茬粡鏀跺埌鍛戒护缁撴灉
+ return res ;
+ }else{
+ node = node.next ;
+ }
+ }
+
+ return null ;
+ }
+
+ /**
+ * 鍖归厤鍛戒护缁撴灉
+ * @param rsFromRtu
+ * @return
+ */
+ public static MidResultToRtu matchFromTail(MidResultFromRtu rsFromRtu){
+ MidResultToRtu res = null ;
+ TcpDownCommandObj obj = null ;
+ Node node = cacheQueue.getLastNode() ;
+ while(node != null && node.obj != null){
+ obj = (TcpDownCommandObj)node.obj;
+ res = obj.result ;
+ if(res != null
+ && res.rtuAddr.equals(rsFromRtu.rtuAddr)
+ && res.downCode.equals(rsFromRtu.upCode)){
+ obj.onceReceivedResult = true ;//鏍囪瘑宸茬粡鏀跺埌鍛戒护缁撴灉
+ return res ;
+ }else{
+ node = node.pre ;
+ }
+ }
+
+ return null ;
+ }
+
+ /**
+ * 寰楀埌绗竴涓妭鐐�
+ * @return
+ */
+ public static Node getFirstQueueNode(){
+ return cacheQueue.getFirstNode() ;
+ }
+
+ /**
+ * 寰楀埌鏈�鍚庝竴涓妭鐐�
+ * @return
+ */
+ public static Node getLastQueueNode(){
+ return cacheQueue.getLastNode() ;
+ }
+
+ /**
+ * 绉婚櫎鑺傜偣
+ * @param node
+ */
+ public static void removeNode(Node node){
+ cacheQueue.remove(node);
+ }
+
+ /**
+ * 缂撳瓨鐨勮妭鐐规暟
+ * @Return 缂撳瓨鑺傜偣鏁�
+ */
+ public static Integer size(){
+ return cacheQueue.size() ;
+ }
+
+}
--
Gitblit v1.8.0