Perl Example

#!/usr/bin/perl

# vi: ts=4 sw=4

use Net::DBus;
use Net::DBus::Reactor;

use strict;
use warnings;

our $VERSION = 0.01;

# Constants
my $Connection_Status_Connected = 0;

# Salut connection manager
my $bus = Net::DBus->session;
my $managerService = $bus->get_service('org.freedesktop.Telepathy.ConnectionManager.salut');
my $managerObject = $managerService->get_object('/org/freedesktop/Telepathy/ConnectionManager/salut', 'org.freedesktop.Telepathy.ConnectionManager');

print "List protocols:\n";
my $protocols = $managerObject->ListProtocols;
for my $protocol (@$protocols) {
        print "  $protocol\n";
}

# Request connection
my ($connectionName, $connectionPath) = $managerObject->RequestConnection('salut', {'first-name' => 'Jack', 'last-name' => 'Bates'});
print "Connection name: $connectionName\n";
print "Connection path: $connectionPath\n";

my $connectionService = $bus->get_service($connectionName);
my $connectionObject = $connectionService->get_object($connectionPath, 'org.freedesktop.Telepathy.Connection');

# Connect
$connectionObject->connect_to_signal('StatusChanged', \&statusChanged);
$connectionObject->Connect;

# StatusChanged callback
sub statusChanged {
        my ($status, $reason) = @_;

        if ($status != $Connection_Status_Connected) {
                print "Status: $status\n";
                print "Reason: $reason\n";
                return;
        }

        print "List channels:\n";
        my $channels = $connectionObject->ListChannels;
        for my $channel (@$channels) {
                print "  $channel\n";
        }

        $connectionObject->Disconnect;
        exit;
}

# Event loop
my $reactor = Net::DBus::Reactor->main;
$reactor->run;