Exemplo n.º 1
0
 private static void Download(string remoteFile, string localFile, NeoFileSystemService.NeoFileSystemService fileSystemService)
 {
     Byte[] fileData = fileSystemService.FileGet(remoteFile);
     FileStream file = File.Create(localFile);
     file.Write(fileData, 0, fileData.Length);
     file.Close();
 }
Exemplo n.º 2
0
        private static void ScriptAlgorithm()
        {
            string remoteFile = "neopocket.zip";
            string localFile = "neopocket.zip";

            if (D.ModoTeste)
            {
                remoteFile = "neopocket_teste.zip";
                D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("### Executando o atualizador em modo de teste ###");
                D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Irá buscar arquivo " + remoteFile + " mesmo que não tenha sido lançada uma nova versão");
            }

            D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Iniciando o sistema de atualização automática versão " + D.APP_VERSION);
            //Dorme um segundo para poder ver a versão
            System.Threading.Thread.Sleep(1000);

            try
            {
                #region carrega as config

                try
                {
                    ConfigLoad();
                }
                catch
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Não foi possível carregar as configurações");
                    D.FrmPrincipalRef.ScriptEnd();
                    return;
                }

                #endregion

                #region referência para o web service / NeoFileSystemService

                ValidationSoapHeader header = new ValidationSoapHeader();
                header.Directory = directory;
                header.Password = password;
                NeoFileSystemService.NeoFileSystemService fileSystemService = new NeoFileSystemService.NeoFileSystemService();
                fileSystemService.ValidationSoapHeaderValue = header;

                try
                {
                    foreach (string diretorio in fileSystemService.DirList(""))
                    {
                        //Faz nada apenas testa se conectou
                    }
                }
                catch (Exception e)
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Não foi possível encontrar o servidor, tente novamente mais tarde " + e.Message);
                    D.FrmPrincipalRef.ScriptEnd();
                    return;
                }

                #endregion

                #region busca o número da versão atual do neopocket

                /* Variaveis utilizadas nessa região */
                String versionFileName = "neopocket-version.txt";
                Byte[] arlDataVersionFile = null;
                FileStream fsVersionFile = null;

                try
                {
                    /* Algoritmo */
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Checando versão do neopocket");
                    arlDataVersionFile = fileSystemService.FileGet(@"nova_versao\" + versionFileName);
                    fsVersionFile = File.Create(D.AplicacaoDiretorio + versionFileName);
                    fsVersionFile.Write(arlDataVersionFile, 0, arlDataVersionFile.Length);
                    fsVersionFile.Close();

                    if (File.Exists(D.AplicacaoDiretorio + "NeoPocketUpdater.ini"))
                    {
                        StreamReader sr = new StreamReader(D.AplicacaoDiretorio + "NeoPocketUpdater.ini");
                        lastVersion = sr.ReadLine();
                        sr.Close();

                        sr = new StreamReader(D.AplicacaoDiretorio + versionFileName);
                        newVersion = sr.ReadLine();
                        sr.Close();
                        File.Delete(D.AplicacaoDiretorio + versionFileName);

                        if (newVersion.Equals(lastVersion) && !D.ModoTeste)
                        {
                            D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Carregando sistema Neopocket");
                            D.FrmPrincipalRef.ScriptEnd();
                            return;
                        }
                        else
                        {
                            D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Guardando a versão desta atualização");
                            StreamWriter tw = new StreamWriter(D.AplicacaoDiretorio + "NeoPocketUpdater.ini");
                            tw.Flush();
                            tw.WriteLine(newVersion);
                            tw.Close();
                        }
                    }
                    else
                    {
                        D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Não foi possível verificar a versão atual do neopocket");
                    }
                }
                catch
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Não foi possível verificar a versão atual do neopocket");
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Carregando sistema Neopocket");
                    D.FrmPrincipalRef.ScriptEnd();
                    return;
                }

                #endregion

                /* Apartir daqui, qualquer exceção que ocorrer tem que da rollback no número
                 * da versão, para evitar que o neopocket fique com uma versão corrumpida. */

                #region sincronização

                try
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Verificando se existem pedidos, clientes, recusa para serem enviados");
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Selecionando novos clientes e pedidos");
                    Sincronizacao.Iniciar();
                    Sincronizacao.ClientesSelecionarParaEnvioCSV();
                    Sincronizacao.RecusaSelecionarParaEnvioCSV();
                    Sincronizacao.PedidosSelecionarParaEnvioCSV();
                    bool haviamArquivosParaEnviar = Sincronizacao.ArquivosCompactar();
                    if (haviamArquivosParaEnviar)
                    {
                        D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Enviando novos clientes e pedidos ");
                        Upload(D.AplicacaoDiretorio + D.TabelasSincronizacaoDiretorio + Sincronizacao.ArquivoEnviarNome, directory + @"\" + Sincronizacao.ArquivoEnviarNome, fileSystemService);
                        //              Sincronizacao.FechaConexao();

                        Sincronizacao.LstClienteNovoId = D.Bd.ListGuid(@"
                        select
                                id_cliente_pocket
                        from
                                cliente
                        where
                                status='N'");
                        Sincronizacao.LstPedidoNovoId = D.Bd.ListGuid(@"
                        select
                                id_pedido
                        from
                                pedido
                        where
                                status='N'");

                        //............Recusa....................................

                        Sincronizacao.LstRecusaNovoId = D.Bd.ListInt(@"
                        select
                                id_recusa
                        from
                                recusa
                        where
                                status='N'");

                        D.Bd.ExecuteNonQuery("Update recusa set status = 'S'");
                        D.Bd.ExecuteNonQuery("Update pedido set status = 'S'");
                        D.Bd.ExecuteNonQuery("Update cliente set status = 'S'");
                    }
                    else
                    {
                        D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Não existem clientes ou pedidos novos ");
                    }

                    D.Bd.Con.Close();
                }
                catch (Exception ex)
                {
                    RollBackVersion();
                    throw ex;
                }

                #endregion

                #region baixa a nova versão

                try
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Recebendo a nova versão do sistema");
                    Download(@"nova_versao\" + remoteFile, D.AplicacaoDiretorio + localFile, fileSystemService);
                }
                catch
                {
                    RollBackVersion();
                    throw;
                }

                #endregion

                #region verifica a integridade do arquivo

                D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Verificando a integridade do arquivo");
                if (Md5(D.AplicacaoDiretorio + localFile) != fileSystemService.Md5(@"nova_versao\" + remoteFile))
                {
                    RollBackVersion();
                    throw new Exception("A checagem de integridade falhou, tente mais tarde.");
                }

                #endregion

                #region descompacta a versão

                try
                {
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Descompactando a nova versão do sistema");
                    NeoZip.Zip.UnzipFiles(D.AplicacaoDiretorio + localFile, D.AplicacaoDiretorio);
                    D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Atualização concluída!");
                }
                catch (Exception ex)
                {
                    RollBackVersion();
                    throw ex;
                }

                #endregion

                #region carrega o sistema

                D.FrmPrincipalRef.TxtMessageAddMessageFromOtherThread("Carregando sistema Neopocket");
                D.FrmPrincipalRef.ScriptEnd();

                #endregion
            }
            catch (Exception ex)
            {
                FE.Show(ex);
                D.FrmPrincipalRef.ScriptEnd();
            }
        }