/// <summary> /// deregisters agent /// </summary> public void DeregisterAgent(Agent a) { acInternalRequest = ACRequests.SynchronizeAgentList; while (acInternalRequest == ACRequests.SynchronizeAgentList) Thread.Sleep(20); agentRegister.Remove(a); acInternalRequest = ACRequests.SynchronizeAgentList; while (acInternalRequest == ACRequests.SynchronizeAgentList) Thread.Sleep(20); }
/// <summary> /// creates and starts agent controller /// </summary> public AgentController() { if (acThread != null) throw new Exception("It's not allowed to create more than one agent controller"); agentRegister = new List<Agent>(); acThread = new Thread(acMain); acInternalRequest = ACRequests.Dummy; acThread.Start(); }
/// <summary> /// deregisters all agents which names correspond to specified pattern /// </summary> public void DeregisterAgents(string namePattern) { acInternalRequest = ACRequests.SynchronizeAgentList; while (acInternalRequest == ACRequests.SynchronizeAgentList) Thread.Sleep(20); for (int i = 0; i < agentRegister.Count; ) if (Regex.IsMatch(agentRegister[i].Name, namePattern)) agentRegister.RemoveAt(i); else i++; acInternalRequest = ACRequests.SynchronizeAgentList; while (acInternalRequest == ACRequests.SynchronizeAgentList) Thread.Sleep(20); }
/// <summary> /// agent controller thread main function /// </summary> void acMain() { while (true) { if (acInternalRequest == ACRequests.KillAgentController) break; if (acInternalRequest == ACRequests.SynchronizeAgentList) { acInternalRequest = ACRequests.Dummy; while (acInternalRequest != ACRequests.SynchronizeAgentList) Thread.Sleep(100); acInternalRequest = ACRequests.Dummy; } // agent jobs for (int i = 0; i < agentRegister.Count; i++) { agentRegister[i].Process(); if (agentRegister[i].selfDeregister) { agentRegister.RemoveAt(i); i--; } if (acInternalRequest == ACRequests.KillAgentController) break; } Thread.Sleep(20); } acInternalRequest = ACRequests.Dummy; acThread = null; Thread.CurrentThread.Abort(); }
/// <summary> /// stops agent controller thread and deregisters all agents /// </summary> public void KillAgentController() { acInternalRequest = ACRequests.KillAgentController; while (acInternalRequest == ACRequests.KillAgentController) Thread.Sleep(20); agentRegister.Clear(); }