The InPresence() subroutine
Our presence handler, the callback subroutine
InPresence(), honors requests for subscription and unsubscription to the script
user’s (and therefore the coffee’s) presence. This callback is designed
to work in the same way as the presenceCB() callback
in the Python recipe described in Section 8.3.
However, while the Python Jabberpy library hands to the callbacks a
jabber.Client object and the element to be
handled, the Perl Net::Jabber library hands over a session ID and the
element to be handled. Don’t worry about the session ID here; it’s related
to functionality for building Jabber servers, not clients, and we can
and should ignore it for the purposes of this recipe. What is important
is the element to be handled, which appears as the second
argument passed to the subroutine collected by the
$presence variable from $_[1].
What is common between the two libraries is that the element that
is passed to be handled as the subject of the callback
is an instance of the class that the callback represents. In other words,
a callback is used to handle <presence/>
elements, and the element received is an instance of the
Net::Jabber::Presence class (just as the element
received by a Jabberpy presence callback is an instance of the
jabber.Presence class).
# Handle presence messages sub InPresence { my $presence = $_[1]; my $from = $presence->GetFrom(); my $type = $presence->GetType(); if ($type eq "subscribe") { print "Subscribe request ($from) ...\n"; $jabber->Send($presence->Reply(type ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access