Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Async FTP Progress InfoDemonstrates checking for progress info updates when running a task asynchronously. This example demonstrates an FTP download.
LOCAL loFtp LOCAL lnSuccess LOCAL lcLocalFilename LOCAL lcRemoteFilename LOCAL loTask LOCAL lnCurPctDone LOCAL lcName LOCAL lcValue * This example assumes the Chilkat API to have been previously unlocked. * See Global Unlock Sample for sample code. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Ftp2') loFtp = CreateObject('Chilkat.Ftp2') loFtp.Hostname = "ftp.someFtpServer.com" lnSuccess = loFtp.ConnectOnly() IF (lnSuccess <> 1) THEN ? loFtp.LastErrorText RELEASE loFtp CANCEL ENDIF loFtp.Username = "myLogin" loFtp.Password = "myPassword" lnSuccess = loFtp.LoginAfterConnectOnly() IF (lnSuccess <> 1) THEN ? loFtp.LastErrorText RELEASE loFtp CANCEL ENDIF * Change to the remote directory where the file is located. * This step is only necessary if the file is not in the root directory * for the FTP account. lnSuccess = loFtp.ChangeRemoteDir("someRemoteDirectory") IF (lnSuccess <> 1) THEN ? loFtp.LastErrorText RELEASE loFtp CANCEL ENDIF lcLocalFilename = "/temp/romeo.xml" lcRemoteFilename = "romeo.xml" * -------------------- * Download a file * -------------------- * Call the async version of the GetFile method to return a task object. * The task object is loaded, but is in the Inert state -- meaning it is * not yet scheduled to run on Chilkat's background thread pool. loTask = loFtp.GetFileAsync(lcRemoteFilename,lcLocalFilename) IF (loFtp.LastMethodSuccess = 0) THEN ? loFtp.LastErrorText RELEASE loFtp CANCEL ENDIF * Before starting the task, tell it to keep an in-memory log of what would've been * ProgressInfo callbacks. loTask.KeepProgressLog = 1 * Schedule the task for running on the thread pool. This changes the task's state * from Inert to Live. lnSuccess = loTask.Run() IF (lnSuccess <> 1) THEN ? loTask.LastErrorText RELEASE loTask RELEASE loFtp CANCEL ENDIF * The application is now free to do anything else * while the file is being downloaded. * For this example, we'll simply sleep and periodically * check to see if the download is finished, and report the progress * along the way. lnCurPctDone = 0 DO WHILE loTask.Finished <> 1 IF (loTask.PercentDone <> lnCurPctDone) THEN lnCurPctDone = loTask.PercentDone ? STR(lnCurPctDone) + " percent done" ENDIF * Check the progress info log. * Emit any log entries.. DO WHILE (loTask.ProgressLogSize > 0) * Get the 1st entry, emit it, and then remove it.. lcName = loTask.ProgressInfoName(0) lcValue = loTask.ProgressInfoValue(0) * Entries reporting the received byte count will have the name "RcvByteCount" * Entries reporting the current bytes-per-second will have the name "RcvBytesPerSec" ? lcName + ": " + lcValue loTask.RemoveProgressInfo(0) ENDDO * Sleep 100 ms. loTask.SleepMs(100) ENDDO * Just in case there are any remaining entries... DO WHILE (loTask.ProgressLogSize > 0) * Get the 1st entry, emit it, and then remove it.. lcName = loTask.ProgressInfoName(0) lcValue = loTask.ProgressInfoValue(0) ? lcName + ": " + lcValue loTask.RemoveProgressInfo(0) ENDDO * A finished task could be one that was canceled, aborted, or truly finished. * If the task was "canceled", it was canceled prior to actually starting. This could * happen if the task was canceled while waiting in a thread pool queue to be scheduled by Chilkat's * background thread pool scheduler. * If the task was "aborted", it indicates that it was canceled while running in a background thread. * The ResultErrorText will likely indicate that the task was aborted. * If the task "completed", then it ran to completion, but the actual success/failure of the method * is determined by the result obtained via a GetResult* method. (A "completed" task will * have a StatusInt equal to 7. If the task finished, but was not completed, then it must've * been aborted or canceled: IF (loTask.StatusInt <> 7) THEN ? "Task did not complete." ? "task status: " + loTask.Status RELEASE loTask RELEASE loFtp CANCEL ENDIF * The GetFile method returns a boolean. Therefore, after the task is finished, * we can get the boolean result by calling GetResultBool. This is the return value had * we called GetFile synchronously. lnSuccess = loTask.GetResultBool() IF (lnSuccess <> 1) THEN * The task's ResultErrorText contains what would have been in the LastErrorText property had * the GetFile method been called synchronously. ? loTask.ResultErrorText ELSE ? "File downloaded asynchronously." ENDIF RELEASE loTask lnSuccess = loFtp.Disconnect() RELEASE loFtp |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.