Exemplo n.º 1
0
        public static async Task <bool> UpdateData()
        {
            if (App.usrCorrente == null)
            {
                return(false);
            }

            WSUsuariosJson usr = new WSUsuariosJson
            {
                Email = App.usrCorrente.Email,
                Nome  = App.usrCorrente.Nome,
                Login = App.usrCorrente.Login
            };

            WSUsuariosJson antigo = await BuscarDadosUsuario();

            string resposta = null;

            if (antigo != null)
            {
                // envia dados para servidor, via WebService (PUT ou POST),
                // se dados do usuário tiver sido alterado
                if ((antigo.Nome.CompareTo(App.usrCorrente.Nome) != 0) ||
                    (antigo.Login != App.usrCorrente.Login))
                {
                    resposta = await WSMostraRota.UpdateData("User", usr, false);
                }
                else
                {
                    return(true);
                }
            }
            else
            {
                resposta = await WSMostraRota.UpdateData("User", usr, true);
            }

            // verifica resposta do servidor
            if (string.IsNullOrEmpty(resposta))
            {
                return(false);
            }
            else
            {
                return(resposta.ToLower().CompareTo("true") == 0);
            }
        }
Exemplo n.º 2
0
        public async void OnSincronizar_Clicked(object sender, EventArgs e)
        {
            if (viewModel.IsBusy)
            {
                return;
            }

            // verificar se o e-mail do usuário existe
            if (string.IsNullOrEmpty(App.usrCorrente.WSUrl))
            {
                DependencyService.Get <IMessage>().ShortAlert("Web Service ainda não foi configurado.");
                return;
            }

            // verificar se o Web Service já foi configurado
            if (string.IsNullOrEmpty(App.usrCorrente.WSUrl))
            {
                DependencyService.Get <IMessage>().ShortAlert("Web Service ainda não foi configurado.");
                return;
            }

            // verificar se existe conexão com Internet
            if (App.ExisteConexaoInternet() == false)
            {
                DependencyService.Get <IMessage>().ShortAlert("Sem conexão com a Internet.");
                return;
            }

            // verificar se tem sinal de Wi-Fi
            if (App.usrCorrente.WiFi != 0)
            {
                if (App.ExisteWiFi() == false)
                {
                    DependencyService.Get <IMessage>().ShortAlert("Sem sinal de Wi-Fi.");
                    return;
                }
            }

            // totalizadores de rotas
            int transmidas = 0;
            int recebidas  = 0;
            int tErros     = 0;
            int rErros     = 0;

            // indica processamento em segundo plano
            viewModel.IsBusy = true;

            // cadastra ou atualiza dados do usuário no servidor
            bool resp = await WSUsuariosJson.UpdateData();

            if (resp == false)
            {
                DependencyService.Get <IMessage>().ShortAlert("Dados do usuário não puderam ser atualizados no servidor!.");
                viewModel.IsBusy = false;
                return;
            }

            // lista de rotas cadastradas localmente
            List <RotasBD> rotasLocal = RotasBD.GetRotas(App.usrCorrente.Email);

            // ======================================================
            // primeira parte: receber do servidor lista de rotas
            // ======================================================

            // lista das rotas cadastradas no Web Service
            List <WSRotaResumoJson> listResumo = null;

            // requisitar lista de rotas para o Web Service
            string request  = "Rotas/" + App.usrCorrente.Email;
            string resposta = await WSMostraRota.GetStringAsync(request);

            // verificar se Web Service retornou dados válidos
            WSRotasJson rota;

            if ((resposta != null) && (resposta.ToLower().CompareTo("null") != 0))
            {
                // converter string retornada pelo WebService em uma lista de rotas
                listResumo = JsonConvert.DeserializeObject <List <WSRotaResumoJson> >(resposta);
                if (listResumo.Count > 0)
                {
                    // para cada rota, verificar se ela já está cadastrada na base de dados local
                    int novaRotaId;
                    foreach (WSRotaResumoJson resumo in listResumo)
                    {
                        if (RotaExisteNoBDLocal(rotasLocal, resumo) == false)
                        {
                            // obter dados completo da rota via Web Service
                            request  = "Rota?email=" + App.usrCorrente.Email + "&rota=" + resumo.NumRota.ToString();
                            resposta = await WSMostraRota.GetStringAsync(request);

                            // verificar se Web Service retornou dados válidos
                            if ((resposta != null) && (resposta.ToLower().CompareTo("null") != 0))
                            {
                                // desserializar dados da rota
                                rota = JsonConvert.DeserializeObject <WSRotasJson>(resposta);

                                // não sincronizar rotas que não tenham pelo menos duas coordenadas
                                if ((rota.Coordenadas == null) ||
                                    (rota.Coordenadas.Count < 2))
                                {
                                    continue;
                                }

                                // ordenar coordenadas pela sequência
                                rota.Coordenadas.Sort();

                                // inserir rota na base de dados local
                                novaRotaId = RotasBD.InsereRota(App.usrCorrente.Email, DateTime.Parse(rota.DtHrIni),
                                                                DateTime.Parse(rota.DtHrFim), rota.Distancia);

                                if (novaRotaId > 0)
                                {
                                    // insere lista de coordenadas da rota na base de dados local
                                    CoordenadasBD.ImportarCoordenadas(novaRotaId, rota.Coordenadas);

                                    ++recebidas;
                                }
                                else
                                {
                                    ++rErros;
                                }
                            }
                            else
                            {
                                ++rErros;
                            }
                        }
                    }
                }
            }

            // ======================================================
            // segunda parte: enviar para o servidor
            // ======================================================
            List <CoordenadasBD>     coords;
            List <WSCoordenadasJson> listaCoord;
            WSCoordenadasJson        cJson;

            foreach (RotasBD rotaBD in rotasLocal)
            {
                if (RotaExisteNoWS(listResumo, rotaBD) == false)
                {
                    rota = new WSRotasJson
                    {
                        NumRota      = rotaBD.Id,
                        EmailUsuario = App.usrCorrente.Email,
                        DtHrIni      = rotaBD.DtHrInicial.ToString("G"),
                        DtHrFim      = rotaBD.DtHrFinal.ToString("G"),
                        Distancia    = rotaBD.Distancia
                    };

                    //obtem coordenadas da rota
                    coords = CoordenadasBD.GetCoordenadas(rotaBD.Id);

                    // não sincronizar rotas que não tenham pelo menos duas coordenadas
                    if ((coords == null) || (coords.Count < 2))
                    {
                        continue;
                    }

                    // monta lista de coordenadas
                    listaCoord = new List <WSCoordenadasJson>();
                    foreach (CoordenadasBD c in coords)
                    {
                        cJson = new WSCoordenadasJson
                        {
                            EmailUsr  = App.usrCorrente.Email,
                            IdRota    = rotaBD.Id,
                            Seq       = c.Seq,
                            DataHora  = c.DataHora.ToString("G"),
                            Latitute  = c.Latitude.ToString(),
                            Longitude = c.Longitude.ToString()
                        };

                        listaCoord.Add(cJson);
                    }

                    rota.Coordenadas = listaCoord;

                    resposta = await WSMostraRota.UpdateData("Rota", rota, true);

                    if ((resposta == null) || (resposta.ToLower().CompareTo("true") != 0))
                    {
                        ++tErros;
                    }
                    else
                    {
                        ++transmidas;
                    }
                }
            }

            // fim do processamento em segundo plano
            viewModel.IsBusy = false;

            // mostra mensagem mostrando totais de rotas sincronizadas
            string msg = "Rotas recebidas: " + recebidas.ToString();

            msg += "\nRotas transmitidas: " + transmidas.ToString();
            msg += "\n\nErros recepção: " + rErros.ToString();
            msg += "\nErros transmissão: " + tErros.ToString();

            await DisplayAlert("Sincronização de Rotas", msg, "OK");
        }