AnyEvent-ZeroMQ
view release on metacpan or search on metacpan
lib/AnyEvent/ZeroMQ/Role/WithHandle.pm view on Meta::CPAN
package AnyEvent::ZeroMQ::Role::WithHandle;
BEGIN {
$AnyEvent::ZeroMQ::Role::WithHandle::VERSION = '0.01';
}
# ABSTRACT: Role for specialized socket types that has_a handle object
use MooseX::Role::Parameterized;
use MooseX::Types::Moose qw(ArrayRef);
use true;
use AnyEvent::ZeroMQ::Types qw(SocketType SocketDirection Endpoints);
use AnyEvent::ZeroMQ::Handle;
use AnyEvent::ZeroMQ::Handle::Role::Generic;
use AnyEvent::ZeroMQ::Handle::Role::Readable;
use AnyEvent::ZeroMQ::Handle::Role::Writable;
use ZeroMQ::Raw;
use Try::Tiny;
use Carp qw(confess);
use namespace::autoclean;
parameter 'socket_type' => (
is => 'ro',
isa => SocketType,
required => 1,
);
parameter 'socket_direction' => (
is => 'ro',
isa => SocketDirection,
required => 1,
);
role {
my $p = shift;
my $type = $p->socket_type;
my $dir = $p->socket_direction;
has 'context' => (
is => 'ro',
isa => 'ZeroMQ::Raw::Context',
required => 1,
);
has 'connect' => (
init_arg => 'connect',
isa => Endpoints,
default => sub { [] },
coerce => 1,
traits => ['Array'],
handles => {
connected_to => 'elements',
_connect => 'push',
},
);
has 'bind' => (
init_arg => 'bind',
isa => Endpoints,
default => sub { [] },
coerce => 1,
traits => ['Array'],
handles => {
bound_to => 'elements',
_bind => 'push',
},
);
my @roles = 'AnyEvent::ZeroMQ::Handle::Role::Generic';
push @roles, 'AnyEvent::ZeroMQ::Handle::Role::Readable' if $dir =~ /r/;
push @roles, 'AnyEvent::ZeroMQ::Handle::Role::Writable' if $dir =~ /w/;
# XXX: we want to apply @roles, but not until after the
# parameterized role has been applied. this poses a problem, so
# each consumer must do it manually. wtf.
# a very simple role metaclass -> method list converter. only
( run in 1.184 second using v1.01-cache-2.11-cpan-5837b0d9d2c )