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
(Tcl) Async Task Chain (another example)Demonstrates using a task chain to run a sequence of FTP tasks asynchronously.
load ./chilkat.dll # All Chilkat classes can be unlocked at once at the beginning of a program # by calling UnlockBundle. It requires a Bundle unlock code. set chilkatGlob [new_CkGlobal] set success [CkGlobal_UnlockBundle $chilkatGlob "Anything for 30-day trial."] if {$success != 1} then { puts [CkGlobal_lastErrorText $chilkatGlob] delete_CkGlobal $chilkatGlob exit } set ftp [new_CkFtp2] CkFtp2_put_Hostname $ftp "ftp.example.com" CkFtp2_put_Username $ftp "login" CkFtp2_put_Password $ftp "password" # Connect and login to the FTP server. set success [CkFtp2_Connect $ftp] if {$success != 1} then { puts [CkFtp2_lastErrorText $ftp] delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp exit } set taskChain [new_CkTaskChain] # Create a task to change to the remote directory where the file will be uploaded. # task is a CkTask set task [CkFtp2_ChangeRemoteDirAsync $ftp "junk"] if {[CkFtp2_get_LastMethodSuccess $ftp] == 0} then { puts [CkFtp2_lastErrorText $ftp] delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp delete_CkTaskChain $taskChain exit } # Add this task to the task chain. set success [CkTaskChain_Append $taskChain $task] delete_CkTask $task # Create a task to upload a file. set localFilename "c:/temp/hamlet.xml" set remoteFilename "hamlet.xml" set task [CkFtp2_PutFileAsync $ftp $localFilename $remoteFilename] if {[CkFtp2_get_LastMethodSuccess $ftp] == 0} then { puts [CkFtp2_lastErrorText $ftp] delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp delete_CkTaskChain $taskChain exit } # Add this task to the task chain. set success [CkTaskChain_Append $taskChain $task] delete_CkTask $task # Start the task chain running in a background thread. # Each task is run one after the other (on the same background thread) until all tasks have completed. # The task chain will stop at the first task that fails. CkTaskChain_put_StopOnFailedTask $taskChain 1 set success [CkTaskChain_Run $taskChain] if {!$success} then { puts [CkTaskChain_lastErrorText $taskChain] delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp delete_CkTaskChain $taskChain exit } # The application is now free to do anything else # while the FTP commands are being run... # For this example, we'll simply sleep and periodically # check to see if the taskchain if finished. while {[CkTaskChain_get_Finished $taskChain] != 1} { # Sleep 100 ms. CkTaskChain_SleepMs $taskChain 100 } # A finished task chain could be one that was canceled, aborted, or truly finished. # If the task chain "completed", then it ran to completion. 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 {[CkTaskChain_get_StatusInt $taskChain] != 7} then { puts "Task did not complete." puts "task chain status: [CkTaskChain_status $taskChain]" delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp delete_CkTaskChain $taskChain exit } # If we got to this point, the ChangeRemoteDir and PutFile were successful. # We can visually verify by examining the LastErrorText that was recorded for each # of these method calls.. set numTasks [CkTaskChain_get_NumTasks $taskChain] set taskIdx 0 while {$taskIdx < $numTasks} { set task [CkTaskChain_GetTask $taskChain $taskIdx] # Examine the status of this task, and the ResultErrorText # (the ResultErrorText is the ftp.LastErrorText captured for FTP method called by the task). # Everything should indicate success. puts "task status: [CkTask_status $task]" puts "task log: [CkTask_resultErrorText $task]" delete_CkTask $task set taskIdx [expr $taskIdx + 1] } set success [CkFtp2_Disconnect $ftp] delete_CkGlobal $chilkatGlob delete_CkFtp2 $ftp delete_CkTaskChain $taskChain |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.