package Sprocket::Plugin::EventTest; use Sprocket qw( Plugin ); use base 'Sprocket::Plugin'; use POE; use POE::Filter::Line; use strict; use warnings; sub new { my $class = shift; my $self = $class->SUPER::new( name => 'EventTest', clients => { }, @_ ); $self->spread_subscribe( "/channels/chat" ); $self->spread_publish( "/channels/chat" => "foobar started" ); return $self; } sub spread_message { my ( $self, $message ) = @_; warn "spread_message: $message"; foreach ( keys %{$self->{clients}} ) { if ( my $con = $sprocket->get_connection( $_ ) ) { $con->send( "message: $message" ); } } } # --------------------------------------------------------- # server sub local_connected { my ( $self, $server, $con, $socket ) = @_; $self->take_connection( $con ); $self->{clients}->{ $con->ID } = 1; # POE::Filter::Stackable object: $con->filter->push( POE::Filter::Line->new() ); $con->filter->shift(); # POE::Filter::Stream $con->send( "Foo" ); $self->spread_publish( "/channels/chat" => "foobar" ); return 1; } sub local_receive { my ( $self, $server, $con, $data ) = @_; $self->_log( v => 4, msg => "event test:$data" ); if ( $data =~ m/^quit/i ) { $con->send( "goodbye." ); $con->close(); } return 1; } sub local_disconnected { my ( $self, $server, $con ) = @_; delete $self->{clients}->{ $con->ID }; } 1;