Exemple #1
0
        public static void CriarObjetos()
        {
            TodosOsObjetos = new List <Objeto>();
            Estantes       = new List <Estante>();
            Robos          = new List <Robo>();

            int teste = 0;

            for (int i = 1; i < 10 - 3; i++)
            {
                int teste2 = 0;
                for (int j = 0; j < 8; j++)
                {
                    Estante e = new Estante(i, j);
                    Estantes.Add(e);
                    TodosOsObjetos.Add(e);
                    teste2++;
                    if (teste2 == 2)
                    {
                        j++;
                        teste2 = 0;
                    }
                }
                teste++;

                if (teste == 2)
                {
                    i++;
                    teste = 0;
                }
            }

            Estantes[1].Produtos.Add(new Produto("Banana"));
            Estantes[14].Produtos.Add(new Produto("Maçã"));

            for (int i = 1; i < 8 - 1; i++)
            {
                Robo r = new Robo(10 - 2, i);
                Robos.Add(r);
                TodosOsObjetos.Add(r);
            }

            TodosOsObjetos.Add(PontoDeEntrega);
        }
Exemple #2
0
        public static void ProcessarPedido(Pedido pedido)
        {
            // Recebe um JSON com o pedido e busca a estante onde está o produto.

            List <Estante> estantesComOsProdutosDoPedidoDuplicado = new List <Estante>();

            foreach (Produto produto in pedido.Produtos)
            {
                estantesComOsProdutosDoPedidoDuplicado.Add(BancoDeDados.Estantes.FirstOrDefault(r => r.Produtos.Any(p => p.NomeProduto == produto.NomeProduto)));
            }

            List <Estante> estantesComOsProdutosDoPedido = new List <Estante>();

            foreach (Estante e in estantesComOsProdutosDoPedidoDuplicado)
            {
                if (!estantesComOsProdutosDoPedido.Contains(e))
                {
                    estantesComOsProdutosDoPedido.Add(e);
                }
            }

            // Descobrir quais robôs estão disponíveis
            List <Objeto> robosDisponiveis = new List <Objeto>();

            foreach (Objeto robo in BancoDeDados.Robos)
            {
                string retorno = RealizarRequisicao($"{robo.ID}/EstaDisponivel", "get");
                if (bool.Parse(retorno))
                {
                    robosDisponiveis.Add(robo);
                }
            }


            // Enviar a solicitação para todos os robos disponíveis via API para descobrir qual é o mais próximo do objetivo
            foreach (Estante e in estantesComOsProdutosDoPedido)
            {
                int  menorCaminho         = int.MaxValue;
                Robo roboQueVaiPraEstante = null;

                if (robosDisponiveis.Any())
                {
                    foreach (Robo robo in robosDisponiveis)
                    {
                        int distancia = int.Parse(RealizarRequisicao($"{robo.ID}/EstaDisponivel", "post"));

                        if (menorCaminho > distancia)
                        {
                            menorCaminho         = distancia;
                            roboQueVaiPraEstante = robo;
                        }
                    }
                }
                else
                {
                    pedidos.Append(pedido);
                }

                // Agora que se sabe qual é o robô de menor caminho, envia o robô para a estante
                RealizarRequisicao($"{roboQueVaiPraEstante.ID}/DefinirObjetivo", "post", JsonConvert.SerializeObject(e));

                robosDisponiveis.Remove(roboQueVaiPraEstante);
            }

            //Retornar um status 200 (OK) com a mensagem de "Robo de id {ID} está indo buscar o produto"
        }