public void Run() { // Não roda caso o Nó seja uma "folha", ou seja, não tenha conexões if (!Connections.Any()) { if (Print) { PrintAtividadesEntrada(); } return; } // Ordena a fila de entrada pela ordem de entrada na atividade FilaEntrada = FilaEntrada.OrderBy(x => x.Inicio).ToList(); foreach (SItem item in FilaEntrada) { // Seleciona a próxima atividade (conexão) de acordo com um número aleatório gerado SConnection target = GetConnectionByProbability(rand.NextDouble()); // Pega o tempo de processamento desse item e atualiza o mesmo var tempoProc = target.CalcTS(); var newItem = ProcessItem(new SItem { Nome = item.Nome, Inicio = item.Inicio }, tempoProc); // Adiciona o item na lista de resultados Resultado.Add(newItem); // Adiciona o item na fila de entrada da próxima atividade target.Connection.FilaEntrada.Add(new SItem { Inicio = newItem.Fim, Nome = newItem.Nome }); } // Faz o Display das informações obtidas com a simulação da atividade if (Print) { PrintAtividadesResultado(); } // Processa as connexões RunConnectedActivities(); }
// Adiciona uma Conexão para a ativdade public void AddConnection(SConnection conn) { Connections.Add(conn); Connections = Connections.OrderBy(x => x.Probability).ToList(); }