Cadastre-se Revistas DevMedia Cursos
 

Space de HEITOR PRACIANO PEREIRA
Busca Autor


Últimas 20 atualizações de HEITOR PRACIANO PEREIRA

Artigo - Atualizador FTP VB6

Há cerca de 2 anos, precisei encontrar uma forma de atualizar minha aplicação (HP-SIAC - Sistema de Automação Comercial), e já possuo instalado um servidor FTP (FileZilla Server) em um notebook antigo (Celeron com 1 GB Ram).

OBS: Foi de fundamental importância a existência de um servidor local para os testes que realizei ao testar minha aplicação. Em meu servidor Ftp tenho uma maquina virtual (Vbox) com um servidor filezzila instalado. O Arquivo é grande, mas com um pouco de paciência pode ser baixado. Procure também na internet, existem excelentes tutoriais mostrando como instalar e configurar um servidor Ftp.

Inicialmente encontrei grande dificuldade em produzir um programa que, lê-se no servidor em uma determinada pasta, um conjunto de arquivos e executasse um conjunto de tarefas para atualizar os programas e dados. Mas após montar uma colcha de retalhos, com pedaços de rotinas de diversos tutoriais, conseguir chegar a este resultado que aqui apresento a vocês.

1. O funcionamento de um servidor FTP:

Um servidor Ftp realiza a comunicação através de uma porta (normalmente 21), onde obedece a uma série de comandos linha a linha. Para obter uma comunicação com o mesmo deverá utilizar algum componente de comunicação (o ideal é o WinSock) e após realizar o protocolo de comunicação enviar comandos (SendData), através de uma string cujo o término seja a seqüência chr(13)+chr(10).

Ex Winsock.SendData “LIST” & vbCrLf (busca a lista de arquivos da pasta atual).

Destaquei este artigo na internet onde é mostrado o funcionamento do FTP:http://balaiotecnologico.blogspot.com.br/2010/07/funcionamento-de-servicos-ftp.html

Bem, o importante é entender que precisaremos usar dois componentes WinSock para estabelecer a comunicação completa com o servidor. O primeiro, denominado de “Inet”, terá a função de comunicação básica passando os comandos e recebendo as respostas do servidor. O segundo, denominado de “DataR”, terá a função de transferência dos dados de arquivos existentes no servidor. Utilizarei o modo passivo, é mais simples deixar que o servidor escolha as portas.

2. O formulário Base e seus componentes:

Vamos então, detalhar o formulário principal e os componentes utilizados para que melhor possamos entender o código do programa:

Detalhando formulário

Figura 1. Detalhando formulário

Project

Figura 2. Project

Na estrutura do projeto vemos dois formulários (Altera e Atualhp). O formulário “Altera” é uma estrutura bem simples que chamo para visualizar o texto com o histórico das atualizações de meu sistema. O formulário “AtualHp”, (Form main) é que será o objeto principal deste artigo. É nele que está inserido o código dos eventos e procedimentos que permite a comunicação com o servidor e download dos arquivos.

Temos também, dois módulos com funções e procedimentos públicos. O módulo “Funções”, é todo desenvolvido por mim e possui uma série de funções que normalmente utilizo em todos os meus projetos VB6 e VB.NET. Algumas destas funções detalho no meu código, para melhor esclarecimento do seu uso. No módulo “ModuloShell” possuo um procedimento denominado “ExecCmd” que substitui o comando “Shell” do Vb (não é de minha autoria). Não vou me ater a explicá-lo, pois este não é o objetivo deste artigo, apenas mostro no código sua forma de utilização e os efeitos causados no sistema.

OBS: A estrutura do projeto com todos arquivos utilizados encontra-se disponível para download em meu site, através de meu servidor FTP. Na pasta FtpInet, você vai encontra-lo junto com uma máquina virtual com um servido Ftp já instalado. Você também irá encontrar (em outras pastas o meu aplicativo principal (Setup-Hp-Siac-V7)),outros utilitários e programas utilizados por mim ao longo destes anos. Faça bom uso de todos eles. Quando for descompactado oarquivo FtpInet.zip, que contêm o projeto será criada uma pasta (Ocx_Dll), que contêm componentes externos que precisam ser registrados com o RegSvr32 do windows.

3. O código do programa:

O código é todo comentado. Creio que é o suficiente para que o programador o utilize, ou ainda, copie parte de seu código para aproveita-lo em seus projetos. Por outro lado, com pequenos ajustes creio que qualquer profissional da área irá se beneficiar do seu uso integral.

Listagem 1: Código completo


Option Explicit

'-------------------- Descrição das Variáveis do Sistema ----------------------
'
' NumArq%     Numero arquivo aberto
' AllData$    Usada de forma genérica (ler os parâmetros iniciais do sistema)
' DadosRec$   Receber os dados do servidor Ftp
' Porta%      Número da porta de comunicação de dados do servidor Ftp
' Lpos%       Qtde de bytes recebidos na porta de comunicação
' RespSv$     String de Resposta do Servidor (importante para tomada de decisão)
' Temp$       Variável de uso genérico temporário
' X&,K&       Variáveis inteiras usadas nos contadores e loops de forma genérica
' TipoDow%    Armazena o tippo do download a ser realizado para tomada de decisão
' DadosOk     Variável que armazena o estado da porta de dados do servidor
' NS% -       Contador para saber o número do servidor
' Linhas()    Usado para le linhas de texto de arquivos de textos externos. 
' Servidor()  Armazena o endereço dos servidores
' InetPort()  Armazena a porta usada no servidor (normalmente 21)
' User()      Armazena os Usuários
' Pass()      Armazena as passwords dos usuários
'
' ------------------------------------------------------------------------------
' Obs: Outras variáveis são utilizadas durante os diversos processos que
'      serão explicadas durante estes procedimentos. Determinei apenas 3 nós
'      para os arrays que guardam os dados dos servidores pois não juguei
'      necessidade para mais.
' ------------------------------------------------------------------------------
' São usados dois componentes Winsock (DataR e Inet) um para comunicação básica
' e o outro para fazer download de dados.
' --------------------------------------------------------------------------------------
' É importante frisar que parte destes códigos foram retirados de outras rotinas 
' encontradas na internet e adaptadas as minhas necessidades. 
' --------------------------------------------------------------------------------------

Dim AllData$, DadosRec$, Porta%, QtdV&, Lpos&, RespSv, Temp$, X&, K&
Dim Tipodow%, DadosOk As Boolean, NS%, NumArq%
Dim Linhas$(3), Servidor$(3), InetPort%(3), User$(3), Pass$(3)

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
' Evento Keydown do formulário
'     Caso digite a tecla <esc> (codigo 27) sai do sistema
'     caso digite a tecla <F8> troca o servidor (dados armazenados nos Arrays)

    If KeyCode = 27 Then Unload Me
    If KeyCode = 119 Then MudaServidor
End Sub

Private Sub Form_Unload(Cancel As Integer)
' Saida do Form fecho os dois controles Winsocks caso estejam abertos
    Inet.Close
    DataR.Close
End Sub

Private Sub Form_Load()

 ' A Funções Pc(), OpenArq(), LeLinhas(), GravaLinha, Vlm() são de minha autoria.
 ' Pc() - Separa os dados contidos em uma linha através de um delimitador 
 '   [ Pc (Linha, Delimitador, Posição na linha) ].
 ' Vlm() - Parecido com o Val() só que analiza uma string e retorna o seu valor.
 ' OpeArq() - Abre um arquivo para leitura, gravação ou update 
 '   [ OpenArq (Arquivo, Tipo) ].
 ' LeLinhas - Le o arquivo até o seu final armazenando suas linhas na matriz 
 '   [ LeLinhas (NumArq, Matriz) ].
 ' GravaLinha - Grava no muero do arquivo o texto [ GravaLinha (NumArq, Texto) ].
 ' Outras funções estão contidas no modulo Funcoes mas seu estudo não se adequa ao
 ' momento.
 ' Eu as utilizo muito e é um resquicio da época em que fui programador em MUMPS
 ' Coloca o formulário principal no canto superior direito da tela e seta NS=1
 ' em seguida torna os botões VerfAtual e Atualiza desabilitados


    Me.Top = 0: Me.Left = 0: NS = 1
    VerfAtual.Enabled = False
    Atualiza.Enabled = False

' ----------------------------------------------------------------------------------------------------------------------
' Como uso o atualizador para um sistema com 6 subsistemas utilizo o comando TaskKill
' para destruir as janelas dos programas caso elas estejam ligadas. Tentei fazer isso
' com API´s mas não obtive sucesso.
' -----------------------------------------------------------------------------------------------------------------------

    Shell "taskkill /im contab.exe", vbMinimizedNoFocus
    Shell "taskkill /im receber.exe", vbMinimizedNoFocus
    Shell "taskkill /im pagar.exe", vbMinimizedNoFocus
    Shell "taskkill /im estoque.exe", vbMinimizedNoFocus
    Shell "taskkill /im vendas.exe", vbMinimizedNoFocus
    Shell "taskkill /im compras.exe", vbMinimizedNoFocus
    Shell "taskkill /im liberaepn.exe", vbMinimizedNoFocus
    Shell "taskkill /im hp-siac.exe", vbMinimizedNoFocus

    On Error Resume Next ' Caso ocorra algum erro durante este vai para o prox 
    
' Seto X=1 e abro o arquivo Servidores.Txt contido no dir da aplicação para leitura.
' Leio os dados contidos no arquivo e armazeno nos arrays.
' A Funções Pc(), OpenArq(), LeLinhas(), GravaLinha, Vlm() são de minha autoria.
 ' Pc() - Separa os dados contidos em uma linha através de um delimitador 
 '   [ Pc (Linha, Delimitador, Posição na linha) ].
 ' Vlm() - Parecido com o Val() só que analiza uma string e retorna o seu valor.
 ' OpeArq() - Abre um arquivo para leitura, gravação ou update 
 '   [ OpenArq (Arquivo, Tipo) ].
 ' LeLinhas - Le o arquivo até o seu final armazenando suas linhas na matriz 
 '   [ LeLinhas (NumArq, Matriz) ].
 ' GravaLinha - Grava no muero do arquivo o texto [ GravaLinha (NumArq, Texto) ].
 ' Outras funções estão contidas no modulo Funcoes mas seu estudo não se adequa ao
 ' momento.
 ' Eu as utilizo muito e é um resquicio da época em que fui programador em MUMPS

 ' Abre arquivo para leitura armazena em NumArq o numero
 ' Le todas as linhas do arquivo texto e armazena o numero de linhas em X

    NumArq 
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
09/05/2012 00:00:00





Artigo - Virtualização de Servidores

Já há algum tempo venho usando duas máquinas virtuais como servidores em minha rede local (cerca de três anos). Alguns clientes e colegas me questionam qual a vantagem deste uso? De tanto responder a esta questão, resolvi escrever este pequeno artigo para esclarecer a quem interessar possa.

Antes de enumerar os prós e contras, vamos falar de alguns detalhes pertinentes a esta questão. A instalação de um servidor com todos os programas necessários ao seu bom funcionamento, mesmo um pacotes pronto (Windows Server, Suse, Etc), que são caros e inacessíveis aos pequenos usuários, é uma tarefa que demanda um tempo razoável. Vejamos meu caso:

Servidor 1: com os seguintes Programas: Linux Debian 5, Servidor Samba 3, Kerberos, Open Ldap e Firebird SQL Server como programas principais. Ainda uma série de pequenos pacotes que uso na operação do mesmo (como exemplo o editor JOE, que uso e já estou acostumado). Em resumo: tenho instalado cerca de 50 pacotes de aplicativos para o bom funcionamento de um servidor PDC (Primary Domain Controler) com AD (Active Diretory). Entre instalação e configuração de cada um destes pacotes, um bom profissional não perde menos que um dois dias de trabalho árduo. Mesmo que o profissional tenha capacidade de customizar um Linux (fiz um instalador Linux com a maioria destes pacotes que está disponível para download em meu site), não perderá menos que umas três horas para instalar e configurar o mesmo.

Servidor 2: com os seguintes programas: Windows XP (sem todas as frescuras que normalmente vem com Windows. Que dá um trabalho danado para tirar), Servidor FilleZilla FTP, VncServer (para acesso remoto), e alguns outros programas que utilizo no Windows. Também é possível customizar a instalação do Windows, mas não têm como clonar as configurações feitas. Isto demandará pelo menos um dia de trabalho. Também tenho um Windows customizado, mas por questões óbvias não posso disponibilizá-lo para download.

Instalar os dos servidores em questão, cada vez que tivermos um problema de hardware (quebra de um disco rígido, atualização do servidor) ou até mesmo se quiser fazer um aproveitamento deste trabalho em algum cliente, significa multiplicar o tempo perdido.

Tenho hoje 16 servidores Linux com a mesma configuração instalada, apenas mudando pequenos detalhes como domínio, Ips, etc. (fiz até um script para estas mudanças [16 x 3 = 48]). Ou seja, 48 dias de para instalar e configurar cada um destes servidores. Sem considerar outra questão! Normalmente,

...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
07/05/2012 00:00:00





 

Programador e Analista de Sistemas, Especialista em: - Visual Basic 6 e Net - Firebird Sql - Linux e Windows Script Desenvolvo Tambem utilizando: - C++ - Python - Windows Api Possuo uma pequena empresa (Hp-Sistemas) que tem como carro chefe um sistema de automação comercial denominado Hp-Siac, desenvolvido em Visual Basic 6 (C++) e estou portando para VB.Net. Site: www.hp-sistemas.com.br
Arquivo de atualizações
 2012

Estatísticas do Autor:
Número de posts: 2
Características dos posts deste autor:
Conteúdo:
Utilidade:
1 0
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group