Chilkat Event Callbacks in Unicode (wchar_t) "C"
This example illustrates how to implement standard event callback functions for the Chilkat C
API. All Chilkat classes
with events use the standard callbacks shown below: AbortCheck
, PercentDone
, and ProgressInfo
. While this example focuses on callbacks for an SFTP download, the same method applies to other Chilkat C
APIs.
#include <stdio.h>
#include <C_CkSFtpW.h>
BOOL myAbortCheckW()
{
// To abort the current Chilkat method call, return non-zero.
return 0;
}
BOOL myPercentDoneW(int pctDone)
{
printf("Percent Done: %d\n",pctDone);
// To abort the current Chilkat method call, return non-zero.
return 0;
}
void myProgressInfoW(const wchar_t *name, const wchar_t *value)
{
wprintf(L"%ls: %ls\n",name,value);
}
void ChilkatSampleW(void)
{
HCkSFtpW sftp;
BOOL success;
int port;
const wchar_t *hostname;
const wchar_t *handle;
// Declare event callbacks.
BOOL (*fnAbortCheckW)() = myAbortCheckW;
BOOL (*fnPercentDoneW)(int pctDone) = myPercentDoneW;
void (*fnProgressInfoW)(const wchar_t *name, const wchar_t *value) = myProgressInfoW;
sftp = CkSFtpW_Create();
// Setup event callbacks.
CkSFtpW_setAbortCheck(sftp, fnAbortCheckW);
CkSFtpW_setPercentDone(sftp, fnPercentDoneW);
CkSFtpW_setProgressInfo(sftp, fnProgressInfoW);
// Make sure to set a HeartbeatMs for AbortCheck / PercentDone callbacks..
// Set the HeartbeatMs to 250 milliseconds.
CkSFtpW_putHeartbeatMs(sftp,250);
// Set some timeouts, in milliseconds:
CkSFtpW_putConnectTimeoutMs(sftp,5000);
CkSFtpW_putIdleTimeoutMs(sftp,10000);
// Connect to the SSH server.
// The standard SSH port = 22
// The hostname may be a hostname or IP address.
hostname = L"sftp.example.com";
port = 22;
success = CkSFtpW_Connect(sftp,hostname,port);
if (success != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
// Authenticate with the SSH server. Chilkat SFTP supports
// both password-based authenication as well as public-key
// authentication. This example uses password authenication.
success = CkSFtpW_AuthenticatePw(sftp,L"myLogin",L"myPassword");
if (success != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
// After authenticating, the SFTP subsystem must be initialized:
success = CkSFtpW_InitializeSftp(sftp);
if (success != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
// Open a file on the server:
handle = CkSFtpW_openFile(sftp,L"hamlet.xml",L"readOnly",L"openExisting");
if (CkSFtpW_getLastMethodSuccess(sftp) != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
// Download the file:
success = CkSFtpW_DownloadFile(sftp,handle,L"c:/temp/hamlet.xml");
if (success != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
// Close the file.
success = CkSFtpW_CloseHandle(sftp,handle);
if (success != TRUE) {
wprintf(L"l%s\n",CkSFtpW_lastErrorText(sftp));
CkSFtpW_Dispose(sftp);
return;
}
wprintf(L"Success.\n");
CkSFtpW_Dispose(sftp);
}
int main()
{
ChilkatSampleW();
return 0;
}