AnyEvent-JSONRPC-Lite
view release on metacpan or search on metacpan
lib/AnyEvent/JSONRPC/Lite/Client.pm view on Meta::CPAN
has _next_id => (
is => 'ro',
isa => 'CodeRef',
lazy => 1,
default => sub {
my $id = 0;
sub { ++$id };
},
);
has _callbacks => (
is => 'ro',
isa => 'HashRef',
lazy => 1,
default => sub { {} },
);
has _connection_guard => (
is => 'rw',
isa => 'Object',
);
lib/AnyEvent/JSONRPC/Lite/Client.pm view on Meta::CPAN
params => \@params,
};
if ($self->handler) {
$self->handler->push_write( json => $request );
}
else {
push @{ $self->_request_pool }, $request;
}
$self->_callbacks->{ $request->{id} } = AnyEvent->condvar;
}
sub _handle_response {
my ($self, $res) = @_;
my $d = delete $self->_callbacks->{ $res->{id} };
unless ($d) {
warn q/Invalid response from server/;
return;
}
if (my $error = $res->{error}) {
$d->croak($error);
}
else {
$d->send($res->{result});
lib/AnyEvent/JSONRPC/Lite/Server.pm view on Meta::CPAN
isa => 'HashRef',
default => sub { {} },
);
has _handlers => (
is => 'ro',
isa => 'ArrayRef',
default => sub { [] },
);
has _callbacks => (
is => 'ro',
isa => 'HashRef',
lazy => 1,
default => sub { {} },
);
no Any::Moose;
sub BUILD {
my $self = shift;
lib/AnyEvent/JSONRPC/Lite/Server.pm view on Meta::CPAN
$self->_handlers->[ fileno($fh) ] = $handle;
};
$self->server($server);
weaken $self;
$self;
}
sub reg_cb {
my ($self, %callbacks) = @_;
while (my ($method, $callback) = each %callbacks) {
$self->_callbacks->{ $method } = $callback;
}
}
sub _dispatch {
my ($self, $indicator, $handle, $request) = @_;
return unless $request and ref $request eq 'HASH';
my $target = $self->_callbacks->{ $request->{method} };
# must response if id is exists
if (my $id = $request->{id}) {
$indicator = "$indicator:$id";
my $res_cb = sub {
my $type = shift;
my $result = @_ > 1 ? \@_ : $_[0];
$handle->push_write( json => {
lib/AnyEvent/JSONRPC/Lite/Server.pm view on Meta::CPAN
=item on_eof => $cb->($handle)
EOF callback. same as L<AnyEvent::Handle>'s on_eof callback.
=item handler_options => 'HashRef'
Hashref options of L<AnyEvent::Handle> that is used to handle client connections.
=back
=head2 reg_cb (%callbacks)
Register JSONRPC methods.
$server->reg_cb(
echo => sub {
my ($res_cv, @params) = @_;
$res_cv->result(@params);
},
sum => sub {
my ($res_cv, @params) = @_;
( run in 1.214 second using v1.01-cache-2.11-cpan-d6f9594c0a5 )