Commit | Line | Data |
36cf3bcb |
1 | use strictures 1; |
36cf3bcb |
2 | use Tak::JSONChannel; |
3 | use Tak::Router; |
4 | use IPC::Open2; |
5 | use Tak::Remote; |
799b77f3 |
6 | use Tak::ModuleSender; |
7 | use Tak::ServiceManager; |
34a159d9 |
8 | use Term::ReadLine; |
36cf3bcb |
9 | |
10 | my $pid = open2(my $out, my $in, $^X, qw(-Ilib takd)) |
11 | or die "Couldn't open2 child: $!"; |
12 | |
13 | my $channel = Tak::JSONChannel->new( |
14 | read_fh => $out, |
15 | write_fh => $in |
16 | ); |
17 | |
18 | my $router = Tak::Router->new( |
19 | channel => $channel, |
799b77f3 |
20 | local_request_handlers => { |
21 | MODULE_SENDER => Tak::ServiceManager->new( |
22 | service => Tak::ModuleSender->new |
23 | ) |
24 | }, |
36cf3bcb |
25 | ); |
26 | |
27 | my $remote = Tak::Remote->new( |
28 | router => $router, |
29 | name => 'EVAL' |
30 | ); |
31 | |
34a159d9 |
32 | my $read = Term::ReadLine->new('REPL'); |
33 | |
34 | while (1) { |
35 | my $line = $read->readline('re.pl$ '); |
36 | exit unless defined $line; |
37 | next unless length $line; |
38 | my $reply = [ $remote->blocking_request(eval => $line) ]; |
39 | if ($reply->[0] eq 'MISTAKE') { |
40 | die "Botch: ".join(': ', @{$reply}[1,2]); |
41 | } |
42 | my $ret = $reply->[1]; |
43 | print $ret->{return}; |
44 | if ($ret->{stdout}) { |
45 | chomp($ret->{stdout}); |
46 | print "STDOUT:\n${\$ret->{stdout}}\n"; |
47 | } |
48 | if ($ret->{stderr}) { |
49 | chomp($ret->{stderr}); |
50 | print "STDERR:\n${\$ret->{stderr}}\n"; |
51 | } |
52 | } |