Cogwheel/lab/03_callbacks.t
#!/usr/bin/perl -w
use lib qw(t/lib);
use strict;
use Test::More qw(no_plan);
$|++;
package TestPlugin;
{
use Cogwheel;
BEGIN {
extends qw(Cogwheel::Plugin);
}
after _setup_connection => sub {
my ( $self, $sprocket, $con, $socket ) = @_;
$con->filter->push(
POE::Filter::JSON->new( delimiter => 0, allow_nonref => 1 ) );
};
after remote_connected => sub {
my ( $self, $client, $con, $socket ) = @_;
::pass('client - connected');
$con->send( ['dahut'] );
return 1;
};
after local_connected => sub {
my ( $self, $client, $con, $socket ) = @_;
::pass('server - connected');
return 1;
};
sub local_receive {
my ( $self, $server, $con, $data ) = @_;
::is_deeply( $data, ['dahut'], 'server - got dahut' );
$con->yield( 'got_delay', $data);
return 1;
}
sub got_delay {
my ( $self, $server, $con, $data ) = @_;
::pass('server - got_delay');
$con->send( [ @$data, 'dahut' ] );
}
sub remote_receive {
my ( $self, $client, $con, $data ) = @_;
::is_deeply( $data, [ 'dahut', 'dahut' ], 'got both dahuts!' );
$con->close();
$client->shutdown();
return 1;
}
sub local_disconnected {
my ( $self, $server, $con ) = @_;
::pass("server - disconnected");
$server->shutdown();
return 1;
}
sub remote_disconnected {
my ( $self, $client, $con ) = @_;
::pass("client - disconnected");
$client->shutdown();
return 1;
}
}
package main;
use Cogwheel::Client;
use Cogwheel::Server;
my $server = Cogwheel::Server->new(
ListenPort => 31337,
Plugins => [
{
plugin => TestPlugin->new(),
priority => 0,
},
],
);
my $client = Cogwheel::Client->new(
ClientList => ['localhost:31337'],
Plugins => [
{
Plugin => TestPlugin->new(),
Priority => 0,
},
],
);
POE::Kernel->run();