working remote module loading
[scpubgit/Tak.git] / takc
CommitLineData
36cf3bcb 1use strictures 1;
36cf3bcb 2use Tak::JSONChannel;
3use Tak::Router;
4use IPC::Open2;
5use Tak::Remote;
799b77f3 6use Tak::ModuleSender;
7use Tak::ServiceManager;
34a159d9 8use Term::ReadLine;
36cf3bcb 9
10my $pid = open2(my $out, my $in, $^X, qw(-Ilib takd))
11 or die "Couldn't open2 child: $!";
12
13my $channel = Tak::JSONChannel->new(
14 read_fh => $out,
15 write_fh => $in
16);
17
18my $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
27my $remote = Tak::Remote->new(
28 router => $router,
29 name => 'EVAL'
30);
31
34a159d9 32my $read = Term::ReadLine->new('REPL');
33
34while (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}