Sample code for 30+ languages & platforms
Perl

Async Methods Returning an Object

See more Async Examples

Demonstrates how to call an asynchronous method that returns an object. This example reads email from a POP3 server using the Async versions of the Chilkat methods.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$success = 0;

$mailman = chilkat::CkMailMan->new();

# Set the POP3 server's hostname
$mailman->put_MailHost("pop.example.com");

# Set the POP3 login/password and any other requirements..
$mailman->put_PopUsername("myLogin");
$mailman->put_PopPassword("myPassword");
$mailman->put_PopSsl(1);
$mailman->put_MailPort(995);

# Connect to the POP3 server:
# task is a Task
$task = $mailman->Pop3BeginSessionAsync();
if ($mailman->get_LastMethodSuccess() == 0) {
    print $mailman->lastErrorText() . "\r\n";
    exit;
}

# Start the background task.
$success = $task->Run();
if (!$success) {
    print $task->lastErrorText() . "\r\n";

    exit;
}

# Wait for the POP3 connect task to finish.
# The 1/0 returned by Wait applies to the Wait method call, not the task.
$maxWaitMs = 30000;
$success = $task->Wait($maxWaitMs);
if (!$success or ($task->get_StatusInt() != 7) or ($task->get_TaskSuccess() != 1)) {
    if (!$success) {
        # The task.LastErrorText applies to the Wait method call.
        print $task->lastErrorText() . "\r\n";
    }
    else {
        # The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession)
        print $task->status() . "\r\n";
        print $task->resultErrorText() . "\r\n";
    }

    exit;
}

# Get the number of messages in the mailbox.
# task is a Task
$task = $mailman->GetMailboxCountAsync();

# To keep the example short, we'll skip handling failures.
# The failures would be handled in the same way as shown above.

$success = $task->Run();
$success = $task->Wait($maxWaitMs);
$numMessages = $task->GetResultInt();

if ($numMessages == 0) {
    exit;
}

$email = chilkat::CkEmail->new();

for ($i = 1; $i <= $numMessages; $i++) {

    # task is a Task
    $task = $mailman->FetchByMsgnumAsync($i);
    if ($mailman->get_LastMethodSuccess() == 0) {
        print $mailman->lastErrorText() . "\r\n";
        exit;
    }

    $success = $task->Run();
    $success = $task->Wait($maxWaitMs);
    if (!$success or ($task->get_StatusInt() != 7) or ($task->get_TaskSuccess() != 1)) {
        if (!$success) {
            # The task.LastErrorText applies to the Wait method call.
            print $task->lastErrorText() . "\r\n";
        }
        else {
            # The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum)
            print $task->status() . "\r\n";
            print $task->resultErrorText() . "\r\n";
        }

        exit;
    }

    # Each Chilkat object that can be a return value of an asynchronous task will
    # have a method named LoadTaskResult.  The object returned in the underlying
    # asynchronous method call is retrieved by calling LoadTaskResult. 

    # To say it another way: The application will provide a pre-existing object of
    # the desired return type (in this case it is an email object).  This object is
    # loaded by calling LoadTaskResult.  

    $success = $email->LoadTaskResult($task);

    if (!$success) {
        print $email->lastErrorText() . "\r\n";
        exit;
    }
    else {
        print $email->ck_from() . ": " . $email->subject() . "\n" . "\r\n";
    }

}