=head1 NAME
DJabberd::Component::Example - An example DJabberd service component
=head1 SYNOPSIS
Greeting Hello, world!
This class implements a very simple component that responds to all incoming messages
with a predefined greeting and which returns a vCard for itself when one is requested.
You can change the greeting returned using the optional Greeting configuration setting
as above.
This example also exposes a node called "somebloke" that responds to all messages with
authentic British surprise.
This example uses the higher-level API provided by L, from which
L inherits.
L serves as an example of
how to handle stanzas at a lower level by overriding the C method.
=head1 COPYRIGHT
This module is Copyright (c) 2008 Martin Atkins
This module is distributed under the same terms as the main DJabberd distribution.
=cut
package DJabberd::Component::Example;
use base DJabberd::Component;
use DJabberd::Util qw(exml);
use DJabberd::Log;
use DJabberd::JID;
our $logger = DJabberd::Log->get_logger();
sub set_config_greeting {
my ($self, $greeting) = @_;
$self->{greeting} = $greeting;
}
sub finalize {
my ($self, $opts) = @_;
$logger->info("initializing");
$logger->info("My greeting is ", $self->{greeting});
$self->{greeting} ||= "Hi! I'm an example DJabberd component!";
$self->SUPER::finalize;
}
sub handle_message {
my ($self, $vhost, $stanza) = @_;
my $from = $stanza->from_jid;
my $to = $stanza->to_jid;
$logger->info("Got message from ".$from->as_string);
my $response = $stanza->make_response();
$response->attrs->{"{}type"} = "normal";
$response->set_raw("".exml($self->{greeting})."");
$logger->info("Responding with ".$response->as_xml);
$response->deliver($vhost);
}
sub vcard {
my ($self, $requester_jid) = @_;
return "Example DJabberd component";
}
sub get_node {
my ($self, $nodename) = @_;
if ($nodename eq 'somebloke') {
return DJabberd::Component::Example::ExampleNode->new(
nodename => 'somebloke',
);
}
else {
return undef;
}
}
package DJabberd::Component::Example::ExampleNode;
use base DJabberd::Agent::Node;
use DJabberd::Util qw(exml);
sub handle_message {
my ($self, $vhost, $stanza) = @_;
$logger->info("It's a message to some bloke.");
my $responsetext = "Gaw blimey, guvna!";
my $response = $stanza->make_response();
$response->set_raw("".exml($responsetext)."");
$response->deliver($vhost);
}
sub vcard {
return "Some Bloke";
}
1;