AnyEvent-WebSocket-Client
view release on metacpan or search on metacpan
example/jobviewer view on Meta::CPAN
use Text::Table;
my $uri = URI->new("http://localhost:3000");
if(@ARGV == 0)
{
$uri->path("/server.json");
my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
die $res->status_line unless $res->is_success;
my $data = from_json($res->decoded_content);
my $table = Text::Table->new( 'id', 'command' );
foreach my $server (sort keys %$data)
{
foreach my $id (sort keys %{ $data->{$server} })
{
$table->load([ "$server:$id", join(' ', '%', @{ $data->{$server}->{$id}}) ]);
}
}
example/jobviewer view on Meta::CPAN
unless(defined $server && defined $id)
{
print "usage: $0 [ id ]\n";
exit 2;
}
$uri->path("/job/$server/$id/json");
my $ua = LWP::UserAgent->new;
my $res = $ua->get($uri);
die $res->status_line unless $res->is_success;
my $job = from_json($res->decoded_content);
my $done = AnyEvent->condvar;
print(join(' ', '%', @{ $job->{command} }), "\n");
process_message($_) for @{ $job->{events} };
sub process_message
{
my $msg = shift;
if($msg->{type} eq 'out')
example/jobviewer view on Meta::CPAN
elsif($msg->{type} eq 'closed')
{
print "CONNECTION CLOSED", "\n";
$done->send;
}
}
my $ws = AnyEvent::WebSocket::Client->new->connect($job->{event_url})->recv;
$ws->on(each_message => sub {
my $msg = from_json( pop->decoded_body );
process_message($msg);
});
$done->recv;
lib/AnyEvent/WebSocket/Message.pm view on Meta::CPAN
use Encode ();
# ABSTRACT: WebSocket message for AnyEvent
our $VERSION = '0.55'; # VERSION
has body => ( is => 'ro', required => 1 );
has opcode => ( is => 'ro', default => 1 );
sub decoded_body
{
Encode::decode("UTF-8", shift->body)
}
sub is_text { $_[0]->opcode == 1 }
sub is_binary { $_[0]->opcode == 2 }
sub is_close { $_[0]->opcode == 8 }
sub is_ping { $_[0]->opcode == 9 }
sub is_pong { $_[0]->opcode == 10 }
lib/AnyEvent/WebSocket/Message.pm view on Meta::CPAN
=head2 body
The body or payload of the message.
=head2 opcode
The integer code for the type of message.
=head1 METHODS
=head2 decoded_body
my $body = $message->decoded_body;
Returns the body decoded from UTF-8.
=head2 is_text
my $bool = $message->is_text;
True if the message is text.
=head2 is_binary
my $bool = $message->is_binary;
t/anyevent_websocket_client__proxy.t view on Meta::CPAN
my $err = $@;
if(!$exp_conn_success) {
is $conn, undef;
like $err, qr/unable to connect/i;
return;
}
isnt $conn, undef;
is $err, '';
my $res_cv = AnyEvent->condvar;
$conn->on(next_message => sub {
$res_cv->send($_[1]->decoded_body);
});
$conn->send("foo bar");
my $got = $res_cv->recv;
is $got, "foo bar", $echo_url;
}
sub test_client {
my ($client, $exp_conn_success) = @_;
test_client_at($client, "ws://echo.websocket.org/", $exp_conn_success);
test_client_at($client, "wss://echo.websocket.org/", $exp_conn_success);
t/anyevent_websocket_connection.t view on Meta::CPAN
{label => "0", data => 0},
{label => "utf8 charaters", data => 'ï¼µï¼´ï¼¦ï¼ ï¼·ï¼©ï¼¤ï¼¥ CHARACTERS'},
);
foreach my $case (@test_data)
{
subtest $case->{label} => sub {
is(
$round_trip->($case->{data}),
object {
call decoded_body => $case->{data};
},
'string'
);
is(
$round_trip->(AnyEvent::WebSocket::Message->new(body => $case->{data})),
object {
call decoded_body => $case->{data};
},
'object'
);
};
}
}
subtest 'close' => sub {
my $done = AnyEvent->condvar;
t/anyevent_websocket_connection.t view on Meta::CPAN
my $quit_cv = AnyEvent->condvar;
$y->on(finish => sub {
$closed = 1;
$quit_cv->send("finished");
});
is(
$round_trip->('a'),
object {
call decoded_body => 'a';
},
'single character',
);
is(
$round_trip->('quit'),
object {
call decoded_body => 'quit';
},
'quit',
);
$x->close;
$quit_cv->recv;
is $closed, 1, "closed";
t/anyevent_websocket_connection.t view on Meta::CPAN
$done->recv;
};
my $quit_cv = AnyEvent->condvar;
$y->on(finish => sub { $quit_cv->send; });
$round_trip->();
is(
$first_msg,
object {
call decoded_body => 'first';
},
'first message',
);
is(
$second_msg,
object {
call decoded_body => 'second';
},
'second message',
);
$x->close;
$quit_cv->recv;
};
done_testing;
t/mojo_echo.t view on Meta::CPAN
{label => "single character", data => "a"},
{label => "5k bytes", data => "a" x 5000},
{label => "empty", data => ""},
{label => "0", data => 0},
{label => "utf8 charaters", data => 'ï¼µï¼´ï¼¦ï¼ ï¼·ï¼©ï¼¤ï¼¥ CHARACTERS'},
{label => "quit", data => "quit"},
)
{
my $cv = AnyEvent->condvar;
$connection->on(next_message => sub {
my $message = pop->decoded_body;
$cv->send($message);
});
$connection->send($testcase->{data});
is $cv->recv, $testcase->{data}, "$testcase->{label}: echo succeeds";
}
is $quit_cv->recv, "finished", "friendly disconnect";
done_testing;
( run in 0.288 second using v1.01-cache-2.11-cpan-26ccb49234f )