From 1a2b07f01ba4616fd9e894dddf474b56d020158c Mon Sep 17 00:00:00 2001
From: zhubaomin <zhubaomin>
Date: 星期一, 07 四月 2025 15:18:51 +0800
Subject: [PATCH] 整理版本

---
 pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java |  132 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 132 insertions(+), 0 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java
new file mode 100644
index 0000000..5bceac7
--- /dev/null
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mw-rtu/src/main/java/com/dy/rtuMw/server/rtuData/TaskPool.java
@@ -0,0 +1,132 @@
+package com.dy.rtuMw.server.rtuData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+
+public class TaskPool {
+
+	private static Logger log = LogManager.getLogger(TaskPool.class.getName()) ;
+	
+	private static List<TaskSurpport> tasks = new ArrayList<TaskSurpport>() ;
+
+	private static Integer taskTotal = 0 ;
+	
+	private static TreeConfig taskTreeConf ;
+	
+	
+	public static void setTaskTreeCofig(TreeConfig conf){
+		taskTreeConf = conf ;
+	}
+
+	/**
+	 * 寰楀埌浠诲姟鏍戝疄渚嬫�绘暟
+	 * @return
+	 */
+	public static Integer totalTasks() {
+		return taskTotal ;
+	}
+	
+	
+	/**
+	 * 寰楀埌浠诲姟
+	 * 澶氱嚎绋嬬幆澧冧笅杩愯
+	 * @return
+	 */
+	public static TaskSurpport popTask(){
+		synchronized(tasks){
+			TaskSurpport t = (tasks.size() > 0)?tasks.get(0):null ;
+			if(t != null){
+				tasks.remove(0) ;
+			}else{
+				try {
+					t = newTaskTree() ;
+				} catch (Exception e) {
+					log.error(e.getMessage() == null?"瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛�" : e.getMessage(), e);
+				} finally {
+					if(t == null){
+						log.error("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞″け璐ワ紒" );
+					}else{
+						taskTotal++ ;
+					}
+				}
+			}
+
+			return t ;
+		}
+	}
+	
+	/**
+	 * 鏀惧洖浠诲姟
+	 * 澶氱嚎绋嬬幆澧冧笅杩愯
+	 * 杩欓噷闇�瑕佸悓姝ラ攣锛屽洜涓轰笂闈㈡柟娉曚腑鎵ц瀹宼asks.get(0)涓旀湭鎵цtasks.remove(0)鏈熼棿锛屾湰鏂规硶鎵ц骞朵笖鎵ц瀹岋紝閭d箞鍚庢湡灏变細鍑轰贡瀛�
+	 * @param t
+	 */
+	public static void freeAndCleanTask(TaskSurpport t){
+		synchronized(tasks) {
+			if (t != null) {
+				boolean find = false;
+				for (TaskSurpport tin : tasks) {
+					if (tin == t) {
+						find = true;
+						break;
+					}
+				}
+				if (!find) {
+					t.cleanMeAndSubs();
+					tasks.add(0, t);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * 瀹炰緥鍖栦换鍔″璞℃爲
+	 * @return
+	 * @throws Exception
+	 */
+	private static TaskSurpport newTaskTree() throws Exception{
+		TaskSurpport t = null ;
+		if(taskTreeConf != null){
+			t = newTask(null, taskTreeConf.taskConf, taskTreeConf.subTreeConfs) ;
+		}
+		return t ;
+	}
+	
+	private static TaskSurpport newTask(TaskSurpport root, TaskConfig taskConf, TreeConfig[] subTreeConfs) throws Exception{
+		TaskSurpport t = null ;
+		if(taskConf != null){
+			t = instanceTask(taskConf.clazz) ;
+			if(t != null){
+				t.conf = taskConf ;
+				t.root = root ;
+				if(root == null){
+					root = t ;
+				}
+				newSubTask(root, t, subTreeConfs);
+			}
+		}
+		return t ;
+	}
+	private static void newSubTask(TaskSurpport root, TaskSurpport parent, TreeConfig[] treeConfs)throws Exception{
+		if(parent != null && treeConfs != null && treeConfs.length > 0){
+			parent.subTasks = new TaskSurpport[treeConfs.length] ;
+			for(int i = 0 ; i < treeConfs.length; i++){
+				parent.subTasks[i] = newTask(root, treeConfs[i].taskConf, treeConfs[i].subTreeConfs) ;
+			}
+		}
+	}
+	private static TaskSurpport instanceTask(String clazz)throws Exception{
+		Class<?> c = Class.forName(clazz);
+		if (c == null) {
+			throw new Exception("瀹炰緥鍖栦笂琛屾暟鎹鐞嗕换鍔″璞℃爲澶辫触锛佷换鍔$被涓�" + clazz + "锛�");
+		}else{
+			return (TaskSurpport)c.getDeclaredConstructor().newInstance();
+			//return (TaskSurpport)c.newInstance();
+		}
+	}
+
+}

--
Gitblit v1.8.0