1: /// <summary>
2:
3: /// Manager for the task scheduler
4:
5: /// </summary>
6:
7: public class Manager:Singleton<Manager>
8:
9: {
10:
11: #region Constructor
12:
13:
14:
15: /// <summary>
16:
17: /// Constructor
18:
19: /// </summary>
20:
21: protected Manager()
22:
23: : base()
24:
25: {
26:
27: try
28:
29: {
30:
31: Config = Gestalt.Manager.Instance.GetConfigFile<Configuration.Configuration>("TaskScheduler");
32:
33: Workers = new List<Worker>();
34:
35: for (int x = 0; x < Config.NumberOfThreads; ++x)
36:
37: {
38:
39: Worker TempWorker = new Worker("");
40:
41: Workers.Add(TempWorker);
42:
43: }
44:
45: }
46:
47: catch { throw; }
48:
49: }
50:
51:
52:
53: #endregion
54:
55:
56:
57: #region Public Functions
58:
59:
60:
61: /// <summary>
62:
63: /// Starts the task manager
64:
65: /// </summary>
66:
67: /// <param name="TaskAssemblyLocation">Location of the task assembly</param>
68:
69: public void Start(string TaskAssemblyLocation)
70:
71: {
72:
73: try
74:
75: {
76:
77: Assembly TaskAssembly = Assembly.LoadFile(TaskAssemblyLocation);
78:
79: AddTasks(TaskAssembly);
80:
81: StartWorkers();
82:
83: }
84:
85: catch { throw; }
86:
87: }
88:
89:
90:
91: /// <summary>
92:
93: /// Starts the task manager
94:
95: /// </summary>
96:
97: /// <param name="TaskAssembly">The task assembly</param>
98:
99: public void Start(Assembly TaskAssembly)
100:
101: {
102:
103: try
104:
105: {
106:
107: AddTasks(TaskAssembly);
108:
109: StartWorkers();
110:
111: }
112:
113: catch { throw; }
114:
115: }
116:
117:
118:
119: /// <summary>
120:
121: /// Starts the task manager
122:
123: /// </summary>
124:
125: /// <param name="TaskAssemblies">The task assemblies</param>
126:
127: public void Start(List<Assembly> TaskAssemblies)
128:
129: {
130:
131: try
132:
133: {
134:
135: for (int x = 0; x < TaskAssemblies.Count; ++x)
136:
137: {
138:
139: AddTasks(TaskAssemblies[x]);
140:
141: }
142:
143: StartWorkers();
144:
145: }
146:
147: catch { throw; }
148:
149: }
150:
151:
152:
153: /// <summary>
154:
155: /// Stops the tasks
156:
157: /// </summary>
158:
159: public void Stop()
160:
161: {
162:
163: try
164:
165: {
166:
167: for (int x = 0; x < Config.NumberOfThreads; ++x)
168:
169: {
170:
171: Workers[x].Stop();
172:
173: }
174:
175: }
176:
177: catch { throw; }
178:
179: }
180:
181:
182:
183: #endregion
184:
185:
186:
187: #region Private Functions
188:
189:
190:
191: private void AddTasks(Assembly TaskAssembly)
192:
193: {
194:
195: try
196:
197: {
198:
199: List<Type> TaskTypes = Utilities.Reflection.GetTypes(TaskAssembly, "EchoNet.Task");
200:
201: for (int x = 0; x < TaskTypes.Count; )
202:
203: {
204:
205: for (int y = 0; y < Workers.Count && x < TaskTypes.Count; ++y, ++x)
206:
207: {
208:
209: Task TempTask = (Task)TaskTypes[x].Assembly.CreateInstance(TaskTypes[x].FullName);
210:
211: TempTask.Setup(TaskTypes[x].Name);
212:
213: Workers[y].AddTask(TempTask);
214:
215: }
216:
217: }
218:
219: }
220:
221: catch { throw; }
222:
223: }
224:
225:
226:
227: private void StartWorkers()
228:
229: {
230:
231: try
232:
233: {
234:
235: for (int x = 0; x < Config.NumberOfThreads; ++x)
236:
237: {
238:
239: Workers[x].Start();
240:
241: }
242:
243: }
244:
245: catch { throw; }
246:
247: }
248:
249:
250:
251: #endregion
252:
253:
254:
255: #region Private Properties
256:
257:
258:
259: private List<Worker> Workers { get; set; }
260:
261: private Configuration.Configuration Config { get; set; }
262:
263: #endregion
264:
265: }