Devel-REPL-InProcess
view release on metacpan or search on metacpan
lib/Devel/REPL/Client/AnyEvent.pm view on Meta::CPAN
package Devel::REPL::Client::AnyEvent;
use strict;
use warnings;
use Devel::REPL::Client::AnyEvent::Connection;
use AnyEvent::Socket;
use Scalar::Util qw(weaken);
use Term::ReadKey;
use constant {
EOT => "\x04",
};
my $RESTORE_READMODE;
END {
ReadMode 0, \*STDIN if $RESTORE_READMODE;
lib/Devel/REPL/Client/AnyEvent.pm view on Meta::CPAN
tcp_guard => undef,
}, $class;
return $self;
}
sub listen {
my ($self) = @_;
my $weak_self = $self;
weaken($weak_self);
my $cb = sub { $weak_self->_new_connection($_[0]) };
my $prepare = ($self->{path} && defined $self->{mode}) ? sub {
chmod $weak_self->{mode}, $weak_self->{path}
or die "Unable to change file mode for socket: $!";
} : undef;
if ($self->{port}) {
$self->{tcp_guard} = tcp_server('127.0.0.1', $self->{port}, $cb);
} elsif ($self->{path}) {
$self->{tcp_guard} = tcp_server('unix/', $self->{path}, $cb, $prepare);
}
lib/Devel/REPL/Client/AnyEvent/Connection.pm view on Meta::CPAN
package Devel::REPL::Client::AnyEvent::Connection;
use strict;
use warnings;
use AnyEvent::Handle;
use Scalar::Util qw(weaken);
use Term::ReadKey;
use constant {
EOT => "\x04",
};
sub new {
my ($class, %args) = @_;
my $self = bless {
handle => undef,
input => undef,
on_close => undef,
}, $class;
my $weak_self = $self;
weaken($weak_self);
my $handle = AnyEvent::Handle->new(
fh => $args{socket},
on_error => sub {
my ($handle, $fatal, $message) = @_;
$weak_self->{handle} = $weak_self->{watch} = undef;
$handle->destroy;
$weak_self->{on_close}->($weak_self)
if $weak_self->{on_close};
},
lib/Devel/REPL/Server/Select.pm view on Meta::CPAN
);
}
die "Error during connect: $!" unless $self->{socket};
$self->{fds}->add($self->{pty}, $self->{socket});
my $term = $TERM ||= Term::ReadLine->new;
my $weak_self = $self;
Scalar::Util::weaken($weak_self);
$term->newTTY($self->{pty}->slave, $self->{pty}->slave);
$term->event_loop(sub { $weak_self->_shuttle_data });
$self->{repl} = Devel::REPL->new(term => $term);
$self->{repl_script} = Devel::REPL::Script->new(
_repl => $self->{repl},
!$self->{profile} ? () : (
profile => $self->{profile},
),
( run in 0.813 second using v1.01-cache-2.11-cpan-65fba6d93b7 )