Juju
view release on metacpan or search on metacpan
lib/Juju/RPC.pm view on Meta::CPAN
package Juju::RPC;
BEGIN {
$Juju::RPC::AUTHORITY = 'cpan:ADAMJS';
}
$Juju::RPC::VERSION = '2.002';
# ABSTRACT: RPC Class
use Moose::Role;
use AnyEvent;
use AnyEvent::WebSocket::Client;
use JSON::PP;
use Function::Parameters;
has conn => (is => 'rw');
has result => (is => 'rw');
has is_connected => (is => 'rw');
has done => (is => 'rw');
has request_id => (is => 'rw', isa => 'Int', default => 1);
method BUILD {
my $client = AnyEvent::WebSocket::Client->new(ssl_no_verify => 1);
$self->conn($client->connect($self->endpoint)->recv);
$self->is_connected(1);
$self->conn->on(
each_message => sub {
my ($conn, $message) = @_;
my $body = decode_json($message->decoded_body);
if (defined($body->{Response})) {
$self->done->send($body);
}
}
);
}
method close {
$self->conn->close;
}
method call($params, $cb = undef) {
$self->done(AnyEvent->condvar);
# Increment request id
$self->request_id($self->request_id + 1);
$params->{RequestId} = $self->request_id;
$self->conn->send(encode_json($params));
# non-blocking
return $cb->($self->done->recv) if $cb;
# blocking
return $self->done->recv;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Juju::RPC - RPC Class
=head1 VERSION
version 2.002
=head1 DESCRIPTION
Contains methods and attributes not meant to be accessed directly but
utilized by the exposed API.
=head1 ATTRIBUTES
=head2 conn
Connection object
( run in 0.325 second using v1.01-cache-2.11-cpan-524268b4103 )