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 )