POE::Component::Pluggable

A base class for creating plugin-enabled POE Components
Download

POE::Component::Pluggable Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • Chris Williams
  • Publisher web site:
  • http://search.cpan.org/~bingos/

POE::Component::Pluggable Tags


POE::Component::Pluggable Description

A base class for creating plugin-enabled POE Components POE::Component::Pluggable is a Perl module for creating plugin enabled POE Components. It is a generic port of POE::Component::IRC's plugin system.If your component dispatches events to registered POE sessions, then POE::Component::Pluggable may be a good fit for you.Basic use would involve subclassing POE::Component::Pluggable, then overriding _pluggable_event() and inserting _pluggable_process() wherever you dispatch events from.Users of your component can then load plugins using the plugin methods provided to handle events generated by the component.You may also use plugin style handlers within your component as _pluggable_process() will attempt to process any events with local method calls first. The return value of these handlers has the same significance as the return value of 'normal' plugin handlers.SYNOPSIS # A simple POE Component that sends ping events to registered sessions # every 30 seconds. A rather convoluted example to be honest. { package SimplePoCo; use strict; use base qw(POE::Component::Pluggable); use POE; use POE::Component::Pluggable::Constants qw(:ALL); sub spawn { my ($package, %opts) = @_; $opts{lc $_} = delete $opts{$_} for keys %opts; my $self = bless \%opts, $package; $self->_pluggable_init(prefix => 'simplepoco_'); POE::Session->create( object_states => , ], heap => $self, ); return $self; } sub shutdown { my ($self) = @_; $poe_kernel->post($self->{session_id}, 'shutdown'); } sub _pluggable_event { my ($self) = @_; $poe_kernel->post($self->{session_id}, '__send_event', @_); } sub _start { my ($kernel,$self) = @_; $self->{session_id} = $_->ID(); if ($self->{alias}) { $kernel->alias_set($self->{alias}); } else { $kernel->refcount_increment($self->{session_id}, __PACKAGE__); } $kernel->delay(_send_ping => $self->{time} || 300); return; } sub _shutdown { my ($kernel, $self) = @_; $self->_pluggable_destroy(); $kernel->alarm_remove_all(); $self->alias_remove($_) for $kernel->alias_list(); $kernel->refcount_decrement($self->{session_id}, __PACKAGE__) if !$self->{alias}; $kernel->refcount_decrement($_, __PACKAGE__) for keys %{ $self->{sessions} }; return; } sub register { my ($kernel, $sender, $self) = @_; my $sender_id = $sender->ID(); $self->{sessions}->{$sender_id}++; if ($self->{sessions}->{$sender_id} == 1) { $kernel->refcount_increment($sender_id, __PACKAGE__); $kernel->yield(__send_event => $self->{_pluggable_prefix} . 'registered', $sender_id); } return; } sub unregister { my ($kernel, $sender, $self) = @_; my $sender_id = $sender->ID(); my $record = delete $self->{sessions}->{$sender_id}; if ($record) { $kernel->refcount_decrement($sender_id, __PACKAGE__); $kernel->yield(__send_event => $self->{_pluggable_prefix} . 'unregistered', $sender_id); } return; } sub __send_event { my ($kernel, $self, $event, @args) = @_; return 1 if $self->_pluggable_process(PING => $event, (@args)) == PLUGIN_EAT_ALL; $kernel->post($_, $event, @args) for keys %{ $self->{sessions} }; } sub _send_ping { my ($kernel, $self) = @_; my $event = $self->{_pluggable_prefix} . 'ping'; my @args = ('Wake up sleepy'); $kernel->yield(__send_event => $event, @args); $kernel->delay(_send_ping => $self->{time} || 300); return; } } use POE; my $pluggable = SimplePoCo->spawn( alias => 'pluggable', time => 30, ); POE::Session->create( package_states => , ], ); $poe_kernel->run(); sub _start { my ($kernel, $heap) = @_; $kernel->post(pluggable => 'register'); return; } sub simplepoco_registered { print "Yay, we registered "; return; } sub simplepoco_ping { my ($sender, $text) = @_; print "Got '$text' from ", $sender->ID, " "; return; } Requirements: · Perl


POE::Component::Pluggable Related Software