EV-Websockets
view release on metacpan or search on metacpan
t/18-new-features.t view on Meta::CPAN
my ($c, $data) = @_;
$srv_msg_count++;
$c->send("echo:$data");
if ($srv_msg_count == 1) {
# Send retry immediately â the client's die in on_message
# is caught by G_EVAL, so the connection stays alive
$c->send("retry");
}
},
on_close => sub { delete $keep{srv} },
);
my $phase = 0;
$keep{cli} = $ctx->connect(
url => "ws://127.0.0.1:$port",
on_connect => sub { $_[0]->send("first") },
on_message => sub {
my ($c, $data) = @_;
if ($phase == 0) {
$phase = 1;
die "test exception in on_message";
} elsif ($phase == 1) {
$msg_after_die = $data;
$connection_survived = 1;
$c->close(1000);
}
},
on_close => sub {
delete $keep{cli};
EV::break;
},
on_error => sub { delete $keep{cli}; EV::break },
);
my $to = EV::timer(10, 0, sub { diag "Timeout!"; EV::break });
EV::run;
ok($connection_survived, "connection survived die inside on_message");
is($msg_after_die, "retry", "received message after die in callback");
}
# 8. Server protocol parameter
{
my $ctx = EV::Websockets::Context->new();
my $listen_ok;
eval {
my $port = $ctx->listen(
port => 0,
protocol => 'my-protocol',
on_connect => sub { },
on_message => sub { },
);
$listen_ok = $port > 0;
};
ok($listen_ok, "listen() with protocol parameter succeeds");
ok(!$@, "no error setting protocol on listen()");
}
# 9. X-Forwarded-For -- requires proxy, skip
SKIP: {
skip "X-Forwarded-For test requires proxy setup", 1;
ok(0, "placeholder");
}
done_testing;
POSIX::_exit(Test::More->builder->is_passing ? 0 : 1);
( run in 0.724 second using v1.01-cache-2.11-cpan-13bb782fe5a )