public void AllocateToEngine(long cnt, string line) { if (Agents.Count == 0) { throw new ArgumentException("No agents defined"); } var item = Agents.FirstOrDefault(x => !x.InUse); while (item == null) { // if non free, wait until existing task finishes var active = GetActiveTasks(); var offset = Task.WaitAny(active, WaitTimeOut); if (offset >= 0 && offset != WaitHandle.WaitTimeout) { foreach (var done in Agents.Where(x => x.InUse && x.Task != null && x.Task.IsCompleted)) { done.ReleaseTask(); } item = Agents.First(x => !x.InUse); } } // launch task item.SetTask(cnt, Task.Run(() => item.Process.Analyse(line))); }
private async void MainViewModel_AgentsChanged(object sender, EventArgs e) { var response = await client.GetAsync($"{serverUrl}api/Agent"); if (!response.IsSuccessStatusCode) { MessageBox.Show(response.StatusCode.ToString()); return; } string responseBody = await response.Content.ReadAsStringAsync(); foreach (var item in JsonConvert.DeserializeObject <AgentsList>(responseBody).Agents) { Agents.Add(new Agent() { Id = item.Id, Endpoint = item.Endpoint, OsType = item.OsType, AgentVersion = item.AgentVersion, IsEnabled = item.IsEnabled }); } if (Agents.Any()) { SelectedAgent = Agents.First(); } }
public EngineAgent <TAgent, TObject> GetFreeOne() { if (Agents.Count == 0) { throw new ArgumentException("No agents defined"); } return(Agents.First(x => !x.InUse)); }
public EngineAgent <LocationAgent <TS, TE, TV> > GetFreeOne() { if (Agents.Count == 0) { throw new ArgumentException("No agents defined"); } return(Agents.First(x => !x.InUse)); }
public void DecideRoles() { // Manager Role Manager = Agents.First(a => a.CleanedCells.Count == Agents.Max(p => p.CleanedCells.Count)); Manager.Role = ContractRole.Manager; // Contract Roles Contractors = new List <MasCleaningAgent>(Agents.Where(a => a.Id != Manager.Id)); foreach (var cleaningAgent in Contractors) { cleaningAgent.Role = ContractRole.Contractor; } (Contractors as List <MasCleaningAgent>).Add(Manager); }
public IEnumerable <EngineAgent <TAgent, TObject> > GetFreeList() { if (Agents.Count == 0) { throw new ArgumentException("No agents defined"); } var eng = Agents.First(x => !x.InUse); if (eng == null) { yield break; } yield return(eng); }
/// <summary> /// エピソードが完了したエージェントに待機中のブレインを割り当てる /// </summary> private void SetNextAgents() { int size = Math.Min(NAgents - AgentsSet.Count, CurrentBrains.Count); for (var i = 0; i < size; i++) { var nextAgent = Agents.First(a => a.IsDone); var nextBrain = CurrentBrains.Dequeue(); nextAgent.Reset(); AgentsSet.Add(new AgentPair { agent = nextAgent, brain = nextBrain }); } UpdateText(); }
public void UpdateAgent(IAgent agent) { var current = Agents.First(a => a.Id == agent.Id); Agents[Agents.IndexOf(current)] = agent; }