Fix #6913 - add more documentation to code
[roojs1] / docs / src / Roo_util_TaskRunner.js.html
1 <html><head><title>Roo/util/TaskRunner.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
2  * Based on:
3  * Ext JS Library 1.1.1
4  * Copyright(c) 2006-2007, Ext JS, LLC.
5  *
6  * Originally Released Under LGPL - original licence link has changed is not relivant.
7  *
8  * Fork - LGPL
9  * &lt;script type=&quot;text/javascript&quot;&gt;
10  */
11 /**
12  * @class Roo.util.TaskRunner
13  * Manage background tasks - not sure why this is better that setInterval?
14  * @static
15  *
16  */
17
18 </span><span class="jsdoc-var">Roo.util.TaskRunner </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">interval</span><span class="jsdoc-syntax">){
19     </span><span class="jsdoc-var">interval </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">interval </span><span class="jsdoc-syntax">|| 10;
20     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">tasks </span><span class="jsdoc-syntax">= [], </span><span class="jsdoc-var">removeQueue </span><span class="jsdoc-syntax">= [];
21     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">= 0;
22     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">running </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
23
24     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">stopThread </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
25         </span><span class="jsdoc-var">running </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
26         </span><span class="jsdoc-var">clearInterval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">);
27         </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">= 0;
28     };
29
30     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">startThread </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
31         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">running</span><span class="jsdoc-syntax">){
32             </span><span class="jsdoc-var">running </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
33             </span><span class="jsdoc-var">id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">setInterval</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">runTasks</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">interval</span><span class="jsdoc-syntax">);
34         }
35     };
36
37     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">removeTask </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">){
38         </span><span class="jsdoc-var">removeQueue.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">);
39         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task.onStop</span><span class="jsdoc-syntax">){
40             </span><span class="jsdoc-var">task.onStop</span><span class="jsdoc-syntax">();
41         }
42     };
43
44     </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">runTasks </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
45         </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">removeQueue.length </span><span class="jsdoc-syntax">&gt; 0){
46             </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">removeQueue.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
47                 </span><span class="jsdoc-var">tasks.remove</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">removeQueue</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]);
48             }
49             </span><span class="jsdoc-var">removeQueue </span><span class="jsdoc-syntax">= [];
50             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tasks.length </span><span class="jsdoc-syntax">&lt; 1){
51                 </span><span class="jsdoc-var">stopThread</span><span class="jsdoc-syntax">();
52                 </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
53             }
54         }
55         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">now </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getTime</span><span class="jsdoc-syntax">();
56         </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tasks.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; ++</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">){
57             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">t </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tasks</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">];
58             </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">itime </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">now </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">t.taskRunTime</span><span class="jsdoc-syntax">;
59             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.interval </span><span class="jsdoc-syntax">&lt;= </span><span class="jsdoc-var">itime</span><span class="jsdoc-syntax">){
60                 </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">rt </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">t.run.apply</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.scope </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">t.args </span><span class="jsdoc-syntax">|| [++</span><span class="jsdoc-var">t.taskRunCount</span><span class="jsdoc-syntax">]);
61                 </span><span class="jsdoc-var">t.taskRunTime </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">now</span><span class="jsdoc-syntax">;
62                 </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">rt </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">t.taskRunCount </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-var">t.repeat</span><span class="jsdoc-syntax">){
63                     </span><span class="jsdoc-var">removeTask</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">);
64                     </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
65                 }
66             }
67             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t.duration </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">t.duration </span><span class="jsdoc-syntax">&lt;= (</span><span class="jsdoc-var">now </span><span class="jsdoc-syntax">- </span><span class="jsdoc-var">t.taskStartTime</span><span class="jsdoc-syntax">)){
68                 </span><span class="jsdoc-var">removeTask</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">t</span><span class="jsdoc-syntax">);
69             }
70         }
71     };
72
73     </span><span class="jsdoc-comment">/**
74      * Queues a new task.
75      * @param {Object} task
76      *
77      * Task property : interval = how frequent to run.
78      * Task object should implement
79      * function run()
80      * Task object may implement
81      * function onStop()
82      */
83     </span><span class="jsdoc-var">this.start </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">){
84         </span><span class="jsdoc-var">tasks.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">);
85         </span><span class="jsdoc-var">task.taskStartTime </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Date</span><span class="jsdoc-syntax">()</span><span class="jsdoc-var">.getTime</span><span class="jsdoc-syntax">();
86         </span><span class="jsdoc-var">task.taskRunTime </span><span class="jsdoc-syntax">= 0;
87         </span><span class="jsdoc-var">task.taskRunCount </span><span class="jsdoc-syntax">= 0;
88         </span><span class="jsdoc-var">startThread</span><span class="jsdoc-syntax">();
89         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">;
90     };
91     </span><span class="jsdoc-comment">/**
92      * Stop  new task.
93      * @param {Object} task
94      */
95     </span><span class="jsdoc-var">this.stop </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">){
96         </span><span class="jsdoc-var">removeTask</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">);
97         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">task</span><span class="jsdoc-syntax">;
98     };
99     </span><span class="jsdoc-comment">/**
100      * Stop all Tasks
101      */
102     </span><span class="jsdoc-var">this.stopAll </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
103         </span><span class="jsdoc-var">stopThread</span><span class="jsdoc-syntax">();
104         </span><span class="jsdoc-keyword">for</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">= 0, </span><span class="jsdoc-var">len </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">tasks.length</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">len</span><span class="jsdoc-syntax">; </span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">++){
105             </span><span class="jsdoc-keyword">if</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">tasks</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.onStop</span><span class="jsdoc-syntax">){
106                 </span><span class="jsdoc-var">tasks</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">i</span><span class="jsdoc-syntax">]</span><span class="jsdoc-var">.onStop</span><span class="jsdoc-syntax">();
107             }
108         }
109         </span><span class="jsdoc-var">tasks </span><span class="jsdoc-syntax">= [];
110         </span><span class="jsdoc-var">removeQueue </span><span class="jsdoc-syntax">= [];
111     };
112 };
113
114 </span><span class="jsdoc-var">Roo.TaskMgr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.util.TaskRunner</span><span class="jsdoc-syntax">();</span></code></body></html>