Group
Extension

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();


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.