Cancelar Transferencia FTP

Cancelar Transferencia FTP

Postby cuatecatl82 » Mon Oct 21, 2013 4:02 pm

Saludos y buen inicio de Semana:

Tengo un módulo de actualizaciones via FTP, puedo revisar los archivos actualizados, bajarlos y remplazar los archivos antíguos, pero quise implementar un boton para detener la descarga de archivos y cancelar el proceso antes de que 1 o todos los archivos se descarguen, si los archivos se descargan completamente se deshabilita el boton para evitar el proceso.

Image

Trabajo con la Clase ServicesFTP de Jose Javier LLoris Roig, la cual hereda los methods de la Clase TFTP de Habour.

Mi idea es mediante una variable lógica si es .T. la descarga continua, si pulso el boton Cancelar la Variable torna a .F. y se cierra el Dialogo.

Code: Select all  Expand view
REDEFINE BUTTONBMP  oBtn  ID 500 OF oDlg TEXTRIGHT BITMAP   "CANCELAR"  ACTION (lDown:= .F., lFinDlg:= .T., oDlg:END())


Y para mostrar el vance de la desgarga:

Code: Select all  Expand view
oFtp:oFtp:exGauge := ( @FtpProgress() )
          oFtp:oFtp:DownLoadFile( cDestino + "\" + cFile, cFile )


La Función que muestra el progreso de la descarga de los archivos y en la cual interrumpo el procesoa con la variable:

Code: Select all  Expand view
//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal)

LOCAL cProgress := INT( 100*nSent/nTotal )
LOCAL nPos:= 0

IF lDown == .T.
   oProg:SETPOS(cProgress)
   oProg:Refresh()
   oSayP:SetText("Descargando "+cFile+" --> "+STR(nSent)+"        Progreso: "+ALLTRIM(STR(cProgress)) +" % ")
   oSayP:Refresh()
   IF cProgress == 1
      nPos:= nPos + 1
   ENDIF
   oBrw:SETPOS(nPos)
   oBrw:Refresh()
   SysRefresh()
ELSEIF lDown == .F.
  oFTP:CLOSE()       //-----Aki el fallo
   DeleteObject( oFTP )
ENDIF

RETURN Nil



Sl cancelar el proceso el Dialogo de Cierra y muestra este error:

Time from start: 0 hours 0 mins 12 secs
Error occurred at: 21-10-2013, 10:54:23
Error description: Error BASE/3012 Error de argumento: HB_INETERRORCODE
Args:
[ 1] = U

Stack Calls
===========
Called from: => HB_INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:INETERRORCODE( 0 )
Called from: hbtip\client.prg => TIPCLIENTFTP:READTOFILE( 0 )
Called from: hbtip\ftpcli.prg => TIPCLIENTFTP:DOWNLOADFILE( 0 )
Called from: Update.prg => DOWNFILS( 271 )



Como puedo parar la conexión al FTP sin que provoque error, ya que despupés del error el archivo continua descargandose de forma escondida... Talvéz la solución sea sencilla pero no doy como..

Ojala puedan darme una ayudadita.. Gracias..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Cancelar Transferencia FTP

Postby cuatecatl82 » Tue Oct 22, 2013 5:12 am

Up +1 :twisted: :twisted:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Cancelar Transferencia FTP

Postby hmpaquito » Tue Oct 22, 2013 11:44 am

Víctor,

Aunque no tengo mucha idea de lo que puede estar pasando... como veo que insistes con el mensaje he pensado echar una mano: He intentado buscar, segun las llamadas del error, el client.prg y no lo he encontrado ni en xHarbour ni en Harbour 3.2.
Deduzco que debes tener un Harbour antiguo. ¿ Has pensado coger los fuentes actuales de Harbour y utilizar esa parte de las contribs ?
Tampoco he identificado las llamadas con lo que tu dices "aki". Debe ser que tu te refieres a que es esa accion la que genera los problemas.

De todas formas te digo: el comando ftp.exe tiene la opcion de 'disconnect'... no se si habra que desconectar la conexion antes de cerrar(la). Es probable que el Close() prematuro le pueda sentar mal a la clase.
En todo caso, yo miraria los fuentes de la clase para saber que argumento es el que es erroneo para seguirle la pista. Si hubiera tenido los fuentes de la clase yo mismo lo hubiera hecho.


Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cancelar Transferencia FTP

Postby cuatecatl82 » Tue Oct 22, 2013 1:57 pm

Gracias por responder:

Uso Harbour 3.0, he revisado los fuentes de las libs y no hay la opcion de desconectar, no obstante la de conectar, subir y bajar si estan presentes, mi idea es de primero detener la descarga del archivo en curso, para que sea permitible la desconección del FTP, y despues cerrarlo con oFTP:CLOSE(), pero reitero que la opcion de la función desconectar no existe en harbour.

He detectado que si cierro la conexión a internet o si se llega a cortar si se detiene la transferencia y borra el archivo descargado, pero muestra un mensaje que que el sitio ftp retorna el mensaje de desconección, pero no se me hace correcto que por aqui este el tiro.. Lo correcto es que el comando desconectar.. Sigo investigando..

Saludos..
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Cancelar Transferencia FTP

Postby cuatecatl82 » Wed Oct 23, 2013 4:25 am

Por lo pronto ya pude hacer que a media transferencia pueda cancelar la descarga del archivo en curso, pero no de forma "nativa" si no haciendo trampa, entendí que el Objeto oFTP se queda colgado y busca al manejador de errores HB_INETERRORCODE(), para que no se quede buscando al manejador y de error tuve que desviar el tipo de objeto de la clase "ServicesFTP" a otra Clase y después finalizarlo para que no continue la descarga quedando de ésta manera:


Code: Select all  Expand view
//-----------------------------------------------------------------------------------------------------------------//
STATIC FUNCTION FtpProgress(nSent, nTotal)

LOCAL cProgress := INT( 100*nSent/nTotal )
LOCAL nPos:= 0

IF lDown == .T.
   oProg:SETPOS(cProgress)
   oProg:Refresh()
   oSayP:SetText("Descargando "+cFile+" --> "+STR(nSent,.T.)+"        Progreso: "+ALLTRIM(STR(cProgress)) +" % ")
   oSayP:Refresh()
   IF cProgress == 1
      nPos:= nPos + 1
   ENDIF
   oBrw:SETPOS(nPos)
   oBrw:Refresh()
   SysRefresh()
ELSEIF lDown == .F.
   HB_InetCleanup()
   oFtp:= TTimer():New(10, { || Nil }) //--Cambiando de "ServicesFTP" a "TTimer"
   oFTP:END()
   DeleteObject( oFTP )
ENDIF

RETURN Nil
 



Listo: la solución es casi perfecta, no da errores, cierra el dialogo de actualización, no modifica ni borra los archivos a actualizar, peroooo... el archivo "ftp-1.log" se queda cargado en memoria y no lo puedo eliminar ni con el comando FERASE(), este archivo lo genera al conectarse al FTP.

Considero que éste archivo no debiera ser creado, representa un peligro: pues en él esta contenida toda la información de conexión al FTP, nomnbre de usuario, pasword. Habrá forma de evitar que este archivo "ftp-X.log" sea creado..? :roll: :roll: :roll:

Saludos.. :D :D :(
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Cancelar Transferencia FTP

Postby hmpaquito » Wed Oct 23, 2013 7:35 am

Víctor,

Muy, muy bueno... el cambio de tipo de objeto... Genial, SI NO se producen fugas de memoria al no cerrar el oftp de forma "ortodoxa".
Buena también la info del log que no quiere borrarse. ¿ Has probado con el Unlocker, a ver si lo puedes borrar ? Yo, por de pronto, intentaria, a ese archivo cambiarle el nombre y crearlo en temp o algo asi para que no estuviera demasiado "ubicado".

En todo caso, y como te comente, yo hubiera probado primero las rutinas ftp de fwh y/o las rutinas ftp de harbour 3.2. Pero como dicen los informaticos, si funciona ¡ no lo toques ! :D

Saludos
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: Cancelar Transferencia FTP

Postby Antonio Linares » Wed Oct 23, 2013 7:39 am

Victor,

En c:\harbour\contrib\hbtip\ftpcli.prg tienes un ejemplo de cliente FTP en donde hay llamadas al método . No se si este es el código que usas ó parecido. Si publicas un ejemplo completo aqui, lo probaremos y a ver si podemos solucionarlo:

https://github.com/harbour/core/blob/master/contrib/hbtip/ftpcli.prg

En ese código hay llamadas a un método inetErrorCode(), que por el nombre pareciese que esta basado en HB_INETERRORCODE(). De ahi el sugerirte este fichero por si contiene información valiosa para tu código basado en esas funciones.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Cancelar Transferencia FTP

Postby cuatecatl82 » Wed Oct 23, 2013 3:10 pm

Buen dia Maestro Antonio:

Solo queda pendiente evitar que se genere el archivo "ftp-1.log" que se crea al conectar al sitio FTP, es molesto y peligroso que este archivo se genere, ya que contiene toda la información para conectarse a los sitios FTP, esta información no deberia darse a los usuarios finales, de hecho ya estaba comentado en el foro pero no se le dio seguimiento y solución.

http://forums.fivetechsupport.com/viewtopic.php?p=113198#p113198

Si es inavitable que ese archivo sea creado para el uso interno de Harbour para conectarse al FTP, seria bueno que se le cambiara de extención para que no pueda ser abierto tan facil y/o mejor aún cambiar el lugar donde se crea, ya sea en la carpeta temporal de Windows.

El link de los fuentes de Harbour ya los habia revisado, de ahi obtuve la raíz del fallo anterior, revise si de ahi proviene la creación del archivo "ftp-1.log" pero no lo encontre, talvez este en los demás fuentes pero no me dio tiempo de revisarlo.

Lo de detener la transferencia del archivo no me da problemas, funciona como lo explique anteriormente...

Ojala se puediera solucionar este pequeño bug.. Saludos.. :lol: :lol:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México

Re: Cancelar Transferencia FTP

Postby Antonio Linares » Wed Oct 23, 2013 4:48 pm

Victor,

Comprueba si en tu código se usa esto:

METHOD New( oUrl, xTrace, oCredentials ) CLASS TIPClient

TIPClient():New( ... )

si especificas el segundo parámetro como .F. no se debería generar ningun fichero .log
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Cancelar Transferencia FTP

Postby cuatecatl82 » Thu Oct 24, 2013 12:53 am

¡¡¡ PERFECTO MAESTRO: !!!

Ahora si, funciona como lo tenia pensado..
No pues con razón, en los parametros de la clase esta determinado xomo XTrace, yo estube buscando algo que tuviera que ver con ".log" pero no di mas que con StartCleanLogFile()

Gracias... :mrgreen: :mrgreen: :mrgreen:
Soluciones y Diseño de Software
Damos Soluciones...

I.S.C. Victor Daniel Cuatecatl Leon
Director y Diseñador de Proyectos

http://www.soldisoft.unlugar.com
http://www.sisa.unlugar.com
danyleon82@hotmail.com
www.facebook.com/victordaniel.cuatecatlleon
User avatar
cuatecatl82
 
Posts: 625
Joined: Wed Mar 14, 2007 6:49 pm
Location: San Cristobal de las Casas, Chiapas México


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 87 guests