NAME

Tibco::Rv::Listener - Tibco Listener event object

SYNOPSIS

my ( $listener ) =
   $rv->createListener( subject => 'ABC', callback => sub
{
   my ( $msg ) = @_;
   print "Listener got a message: $msg\n";
} );

my ( $msg ) = $rv->createMessage( field => 'value' );
$listener->onEvent( $msg );

DESCRIPTION

A Tibco::Rv::Listener monitors a subject for incoming messages and passes those messages along to a callback. It is a subclass of Tibco::Rv::Event, so Event methods are available to Listeners (documentation on Event methods are reproduced here for convenience).

CONSTRUCTOR

$listener = new Tibco::Rv::Listener( %args )
%args:
   queue => $queue,
   transport => $transport,
   subject => $subject,
   callback => sub { ... }

Creates a Tibco::Rv::Listener. If not specified, queue defaults to the Default Queue, transport defaults to the Intra-Process Transport, subject defaults to the empty string, and callback defaults to:

sub { print "Listener received: @_\n" }

A program registers interest in $subject by creating a Listener. Messages coming in on $subject via $transport are placed on the $queue. When $queue dispatches such an event, it triggers the given callback.

METHODS

$transport = $listener->transport

Returns the transport via which Listener events are arriving.

$subject = $listener->subject

Returns the subject this Listener is listening on.

$queue = $listener->queue

Returns the queue on which this Listener's events will be dispatched.

$callback = $listener->callback

Returns the callback code reference.

$listener->onEvent( $msg )

Trigger an event directly by passing $msg to the Listener. The $msg will be processed as if it was triggered via the event queue.

$listener->DESTROY

Cancels interest in this event. Called automatically when $listener goes out of scope. Calling DESTROY more than once has no effect.

OVERRIDING EVENT CALLBACK

As an alternative to passing in a callback function to the constructor, there is another way to handle events. You can subclass Tibco::Rv::Listener and override the onEvent method, as follows:

package MyListener;
use base qw/ Tibco::Rv::Listener /;

sub new
{
   my ( $proto, %args ) = @_;
   my ( $self ) = $proto->SUPER::new( %args );
   # your initialization code
   return $self;
}

sub onEvent
{
   my ( $self, $msg ) = @_;
   # process $msg here
   # $self->queue, $self->transport, $self->subject are available
}

# any other implementation code for your class

1;

The Tibco::Rv::Event onEvent method simply passes the $msg on to the callback, so overriding onEvent allows you to process the $msg however you want, and you can just not use the callback.

The advantages of this method of handling events are: it is more object-oriented; you have access to the transport, queue, and subject via the $self accessor methods; and, you can have more elaborate processing of incoming messages without having to shove it all into one callback.

You can use your subclassed Listener as follows:

use Tibco::Rv;
use MyListener;

my ( $rv ) = new Tibco::Rv;
my ( $transport ) = new Tibco::Rv::Transport;
my ( $myListener ) =
   new MyListener( transport => $transport, subject => 'ABC' );
$rv->start;

AUTHOR

Paul Sturm <sturm@branewave.com>