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 SFTP Progress InfoDemonstrates checking for progress info updates when running a task asynchronously. This example demonstrates an SFTP download.
LOCAL loSftp LOCAL lnSuccess LOCAL lcLocalFilePath LOCAL lcRemoteFilePath 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.SFtp') loSftp = CreateObject('Chilkat.SFtp') * Set some timeouts, in milliseconds: loSftp.ConnectTimeoutMs = 15000 loSftp.IdleTimeoutMs = 15000 * Connect to the SFTP server. lnSuccess = loSftp.Connect("sftp.example.com",22) IF (lnSuccess <> 1) THEN ? loSftp.LastErrorText RELEASE loSftp CANCEL ENDIF * Authenticate with the SSH server. Chilkat SFTP supports * both password-based authenication as well as public-key * authentication. This example uses password authenication. lnSuccess = loSftp.AuthenticatePw("myLogin","myPassword") IF (lnSuccess <> 1) THEN ? loSftp.LastErrorText RELEASE loSftp CANCEL ENDIF * After authenticating, the SFTP subsystem must be initialized: lnSuccess = loSftp.InitializeSftp() IF (lnSuccess <> 1) THEN ? loSftp.LastErrorText RELEASE loSftp CANCEL ENDIF * -------------------- * Download a file * -------------------- lcLocalFilePath = "c:/temp/hamlet.xml" lcRemoteFilePath = "subdir1/subdir2/hamlet.xml" * Call the async version of the DownloadFileByName 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 = loSftp.DownloadFileByNameAsync(lcRemoteFilePath,lcLocalFilePath) IF (loSftp.LastMethodSuccess = 0) THEN ? loSftp.LastErrorText RELEASE loSftp 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 loSftp 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 loSftp CANCEL ENDIF * The DownloadFileByName 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 DownloadFileByName synchronously. lnSuccess = loTask.GetResultBool() IF (lnSuccess <> 1) THEN * The task's ResultErrorText contains what would have been in the LastErrorText property had * the DownloadFileByName method been called synchronously. ? loTask.ResultErrorText ELSE ? "File downloaded asynchronously." ENDIF RELEASE loTask RELEASE loSftp |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.