예제 #1
0
        public static void BuscaObjetosDaTela()
        {
            var listaRobos = Select("Robo", new List <string> {
                "id", "posicaoInicialX", "posicaoInicialY"
            });

            TodosOsObjetos = new List <Objeto>();
            Robos          = new List <Robo>();
            foreach (object[] robozinho in listaRobos)
            {
                Robo robo = new Robo(int.Parse(robozinho[0].ToString()), int.Parse(robozinho[1].ToString()), int.Parse(robozinho[2].ToString()));
                Robos.Add(robo);
                TodosOsObjetos.Add(robo);
            }

            var listaEstante = Select("Estante", new List <string> {
                "id", "posicaoInicialX", "posicaoInicialY"
            });

            Estantes = new List <Estante>();
            foreach (object[] estanteEE in listaEstante)
            {
                Estante estante = new Estante(int.Parse(estanteEE[0].ToString()), int.Parse(estanteEE[1].ToString()), int.Parse(estanteEE[2].ToString()));
                Estantes.Add(estante);
                TodosOsObjetos.Add(estante);
            }

            var listaPde = Select("PontoDeEntrega", new List <string> {
                "id", "posicaoInicialX", "posicaoInicialY"
            });

            foreach (object[] pde in listaPde)
            {
                PontoDeEntrega = new PontoEntrega(int.Parse(pde[0].ToString()), int.Parse(pde[1].ToString()), int.Parse(pde[2].ToString()));
            }
            TodosOsObjetos.Add(PontoDeEntrega);
        }
예제 #2
0
        public 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)
            {
                var estantesComProduto = BancoDeDados.Select("produto", new List <string> {
                    "idEstante"
                }, $"nome like '{produto.NomeProduto.ToLower()}'");
                int idEstante = int.Parse(((object[])estantesComProduto[0])[0].ToString());

                estantesComOsProdutosDoPedidoDuplicado.Add(BancoDeDados.Estantes.FirstOrDefault(r => r.ID == idEstante));
            }

            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;

                string estanteSerializada = JsonConvert.SerializeObject(e);

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

                        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", estanteSerializada);

                robosDisponiveis.Remove(roboQueVaiPraEstante);
            }

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