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);
        }
示例#7
0
    /// <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();
    }
示例#8
0
        public void UpdateAgent(IAgent agent)
        {
            var current = Agents.First(a => a.Id == agent.Id);

            Agents[Agents.IndexOf(current)] = agent;
        }