1 package Object::Remote::ReadChannel;
4 use Scalar::Util qw(weaken);
8 is => 'ro', required => 1,
12 Object::Remote->current_loop
15 on_read_ready => sub { $self->_receive_data_from($fh) }
20 has on_close_call => (
21 is => 'rw', default => sub { sub {} },
24 has on_line_call => (is => 'rw');
26 has _receive_data_buffer => (is => 'ro', default => sub { my $x = ''; \$x });
28 sub _receive_data_from {
30 my $rb = $self->_receive_data_buffer;
31 my $len = sysread($fh, $$rb, 1024, length($$rb));
32 my $err = defined($len) ? '' : ": $!";
33 if (defined($len) and $len > 0) {
34 while (my $cb = $self->on_line_call and $$rb =~ s/^(.*)\n//) {
38 Object::Remote->current_loop
43 $self->on_close_call->($err);
50 Object::Remote->current_loop