AnyEvent-Chromi
view release on metacpan or search on metacpan
examples/server.pl view on Meta::CPAN
elsif($message =~ /^Chromi \S+ info heartbeat/) {
}
elsif($message =~ /^chromi (\d+) \S+ .*$/) {
# Client to Chrome
$log->info("received: $message");
# register who made the request
$requests{$1} = $handle;
# chrome isn't connected
if(not scalar keys %chromi) {
my $reply = "Chromi $1 error " . uri_escape(encode_json({ error => 'chrome not connected'}));
my $frame = Protocol::WebSocket::Frame->new($reply);
$handle->push_write($frame->to_bytes);
}
else {
for my $key (keys %chromi) {
my $c = $chromi{$key}{handle};
my $frame = Protocol::WebSocket::Frame->new($message);
$c->push_write($frame->to_bytes);
}
}
lib/AnyEvent/Chromi.pm view on Meta::CPAN
sub call
{
my ($self, $method, $args, $cb) = @_;
if(not $self->is_connected) {
$log->warning("can't call $method: not connected");
return;
}
my $id = int(rand(100000000));
my $msg = "chromi $id $method";
if($args) {
$msg .= " " . uri_escape(encode_json($args));
}
my $frame = Protocol::WebSocket::Frame->new($msg);
if($cb) {
$self->{callbacks}{$id} = $cb;
}
$self->{handle}->push_write($frame->to_bytes);
}
sub is_connected
{
lib/AnyEvent/Chromi.pm view on Meta::CPAN
$self->{connected} or return;
# Post-Handshake
$ws_frame->append($chunk);
while (my $message = $ws_frame->next) {
if($message =~ /^Chromi (\d+) (\w+) (.*)$/) {
my ($id, $status, $reply) = ($1, $2, $3);
if($self->{callbacks}{$id}) {
$reply = uri_unescape($reply);
if($reply =~ /^\[(.*)\]$/s) {
&{$self->{callbacks}{$id}}($status, decode_json($1));
}
else {
die "error: $reply\n";
}
delete $self->{callbacks}{$id};
}
}
}
( run in 0.447 second using v1.01-cache-2.11-cpan-c21f80fb71c )