Page 1 of 1

TFTPServ

Posted: Thu Aug 30, 2007 2:56 pm
by Ari
Eu gostaria de atualizar a versao do meu sistema dentro da propria rede pegando os arquivos de uma maquina que já foi atualizada.

eu tentei usar o TFTPServ junto com a TFTP e no começo do primeiro arquivo gera um erro no TFTPServ, veja meu codigo

Code: Select all

* =============================================================================
Function Ftp() // Atualizar versao por FTP - 29-08-2007
               // a maquina que atualizar versao grava o IP na Config 1084
* =============================================================================
  local oView, oFtp
  local cIP := rtrim( LerConfig(1084) )

  if empty(cIP)
     MsgAlert("O IP do servidor não foi encontrado na config 1084","IP do servidor FTP")
     return nil
  Endif
  
  oView           := TView():New( SisMain(), "Atualização de versão via FTP" )
  oView:oButBar   := Array(2)
  oView:cAlias    := "ARRAY"
  oView:lCadastro := .t.
  oView:bClose    := {|| if(ValType(oFTP)=="O",oFtp:End(),), LoadRec()  }
  oView:Open()

  DEFINE BUTTON oView:oButBar[2] OF oView:oBar RESOURCE "start" ;
         NOBORDER GROUP ACTION ( oView:oButBar[2]:Disable(), oFtp := BuildServer() ) ;
         TOOLTIP "Iniciar o servidor"        ;
         PROMPT "Servidor" TOP 

  oView:Show()

return nil

* =============================================================================
Function BuildServer() // rotina que aciona o FTP
* =============================================================================
  local oFTPServer

  oFTPServer          := TFtpServer():New()
  oFtpServer:cDefPath := DirWin()
  oFtpServer:cLogFile := "ftpserv.log"
  oFtpServer:lDebug   := .t.
  oFTPServer:Activate()

  Msg("ok, servidor operando")

Return oFTPServer

* =============================================================================
Function FTPClient() // cliente de FTP para copiar
* =============================================================================
  local cIP := "192.168.0.50"
  local oInternet, oFTP, aFiles, n

  if empty(cIP)
     MsgAlert("O IP do servidor não foi encontrado",;
              "IP do servidor FTP")
     return nil
  Endif

  oInternet := TInternet():New()
  oFTP      := TFTP():New( cIP , oInternet, "","" )
  
  if !empty( oFTP:hFTP )

      aFiles := oFTP:Directory( "www/*.*" )

      FOR n := 1 TO Len( aFiles )

         MsgMeter( {|oMeter| CopyFTP( oFTP, aFiles[n,1],;
                   aFiles[n,2], DirTmp(), oMeter  ) },;
                   "aguarde, copiando:" + aFiles[n,1],"Sisrev-Win, copiando arquivo via FTP" )
      Next
   Endif

   oInternet:End()
  
return nil

* =============================================================================
Function CopyFTP( oFTP, cFile, nTotal, cDestino, oMeter )
* =============================================================================
  local hHan, n := 0, cBuffer
  local oFile   := TFTPFile():New( cFile, oFTP )

  oFile:OpenRead()

  oMeter:nTotal := nTotal
  hHan          := FCreate( cDestino + cFile )

  While n <= nTotal

     cBuffer := oFile:Read(128)
     n       += 128

     oMeter:Set( n ) 
     SysRefresh() 

     if Fwrite( hHan, cBuffer, Len(cBuffer) ) < Len(cBuffer)
        Msg("fim de arquivo")
     endif
  End

  FClose( hHan )
  oFile:End()

Return nil
Ari