Visual FoxPro
Visual FoxPro
Async Task Chain (another example)
See more Async Examples
Demonstrates using a task chain to run a sequence of FTP tasks asynchronously.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loFtp
LOCAL loTaskChain
LOCAL loTask
LOCAL lcLocalFilename
LOCAL lcRemoteFilename
LOCAL lnNumTasks
LOCAL lnTaskIdx
lnSuccess = 0
* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
lnSuccess = 0
loFtp = CreateObject('Chilkat.Ftp2')
loFtp.Hostname = "ftp.example.com"
loFtp.Username = "login"
loFtp.Password = "password"
* Connect and login to the FTP server.
lnSuccess = loFtp.Connect()
IF (lnSuccess <> 1) THEN
? loFtp.LastErrorText
RELEASE loFtp
CANCEL
ENDIF
loTaskChain = CreateObject('Chilkat.TaskChain')
* Create a task to change to the remote directory where the file will be uploaded.
loTask = loFtp.ChangeRemoteDirAsync("junk")
IF (loFtp.LastMethodSuccess = 0) THEN
? loFtp.LastErrorText
RELEASE loFtp
RELEASE loTaskChain
CANCEL
ENDIF
* Add this task to the task chain.
lnSuccess = loTaskChain.Append(loTask)
RELEASE loTask
* Create a task to upload a file.
lcLocalFilename = "c:/temp/hamlet.xml"
lcRemoteFilename = "hamlet.xml"
loTask = loFtp.PutFileAsync(lcLocalFilename,lcRemoteFilename)
IF (loFtp.LastMethodSuccess = 0) THEN
? loFtp.LastErrorText
RELEASE loFtp
RELEASE loTaskChain
CANCEL
ENDIF
* Add this task to the task chain.
lnSuccess = loTaskChain.Append(loTask)
RELEASE loTask
* 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.
loTaskChain.StopOnFailedTask = 1
lnSuccess = loTaskChain.Run()
IF (NOT lnSuccess) THEN
? loTaskChain.LastErrorText
RELEASE loFtp
RELEASE loTaskChain
CANCEL
ENDIF
* 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.
DO WHILE loTaskChain.Finished <> 1
* Sleep 100 ms.
loTaskChain.SleepMs(100)
ENDDO
* 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 (loTaskChain.StatusInt <> 7) THEN
? "Task did not complete."
? "task chain status: " + loTaskChain.Status
RELEASE loFtp
RELEASE loTaskChain
CANCEL
ENDIF
* 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..
lnNumTasks = loTaskChain.NumTasks
lnTaskIdx = 0
DO WHILE (lnTaskIdx < lnNumTasks)
loTask = loTaskChain.GetTask(lnTaskIdx)
* 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.
? "task status: " + loTask.Status
? "task log: " + loTask.ResultErrorText
RELEASE loTask
lnTaskIdx = lnTaskIdx + 1
ENDDO
lnSuccess = loFtp.Disconnect()
RELEASE loFtp
RELEASE loTaskChain