A Simple Script

Before moving on, let's have a look how simple it is to interact with Jabber. Example 1-1 shows a simple Perl script that connects to a Jabber server, authenticates, checks who's online, and sends those people a reminder message. It uses the Net::Jabber library, which provides a high-level API to many Jabber-related functions such as handling the connection to the server (this is via another library that Net::Jabber uses—XML::Stream), authentication, events, and all the mechanisms to parse and create Jabber traffic.

Example 1-1. A simple Jabber script

#!/usr/bin/perl

use Net::Jabber qw(Client);
use strict;

# List of addressees for our reminder
our @addressees;

# What we want to send
my  $reminder = $ARGV[0] or die "No reminder!";

# Connect to our Jabber server
my $c= Net::Jabber::Client->new();
$c->Connect('hostname' => 'yak',
            'port'     => 5222);

# Authenticate
$c->AuthSend('username' => 'reminder',
             'password' => 'secret',
             'resource' => 'reminder');

# Set handler to deal with presence packets
# that might (will) be pushed to us (we're
# not interested in any other type of packet)
$c->SetCallBacks('presence' => \&handle_presence);

# Send out our own presence, and run an
# event loop for up to 5 seconds to 
# catch any packets pushed to us
$c->PresenceSend();
$c->Process(5);

# Create a new message with our reminder text
my $m = Net::Jabber::Message->new();
$m->SetBody($reminder);

# Send the message to each of the addressees collected
# in the handle_presence() subroutine
foreach my $jid (@addressees) {

  $m->SetTo($jid);
  $c->Send($m);

}

# Disconnect from the Jabber server and exit
$c->Disconnect;
exit(0);


# Deal with presence packets
sub handle_presence {

  my ($sid, $presence) = @_;

  # Get the presence
  my $show = $presence->GetShow() || 'online';

  # If the user is around, add to addressee list
  # 'around' here means 'online' or 'chat'
  push @addressees, $presence->GetFrom()
    if $show eq 'online' or $show eq 'chat';

}

The script is fairly self-explanatory. For now, we'll leave the script's description to the comments embedded within it; by the end of the book, you should have a good understanding of how to put together complete applications and utilities using Jabber libraries in Perl, Python, and Java.