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 => 'UTF8 WIDE 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 => 'UTF8 WIDE 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.242 second using v1.01-cache-2.11-cpan-26ccb49234f )