new Client/Router/Service arch
[scpubgit/Tak.git] / lib / Tak / REPL.pm
index 4c4f161..835f659 100644 (file)
@@ -3,40 +3,27 @@ package Tak::REPL;
 use Term::ReadLine;
 use Moo;
 
-has world => (is => 'ro', required => 1);
-
-has remote => (is => 'lazy');
-
-sub _build_remote {
-  my ($self) = @_;
-  my $world = $self->world;
-  $world->remote_for('meta')->blocking_request(
-    register => eval => 'Tak::EvalService'
-  );
-  $world->remote_for('eval')
-}
+has client => (is => 'ro', required => 1);
 
 sub run {
-  my $remote = $_[0]->remote;
+  my $client = $_[0]->client;
   my $read = Term::ReadLine->new('REPL');
 
   while (1) {
     my $line = $read->readline('re.pl$ ');
     last unless defined $line;
     next unless length $line;
-    my @reply = $remote->blocking_request(eval => $line);
-    if ($reply[0] eq 'MISTAKE') {
-      die "Botch: ".join(': ', @reply[1,2]);
-    }
-    my $ret = $reply[1];
-    print $ret->{return};
-    if ($ret->{stdout}) {
-      chomp($ret->{stdout});
-      print "STDOUT:\n${\$ret->{stdout}}\n";
+    my $result = $client->do(eval => $line);
+    print exists($result->{return})
+            ? $result->{return}
+            : "Error: ".$result->{exception};
+    if ($result->{stdout}) {
+      chomp($result->{stdout});
+      print "STDOUT:\n${\$result->{stdout}}\n";
     }
-    if ($ret->{stderr}) {
-      chomp($ret->{stderr});
-      print "STDERR:\n${\$ret->{stderr}}\n";
+    if ($result->{stderr}) {
+      chomp($result->{stderr});
+      print "STDERR:\n${\$result->{stderr}}\n";
     }
   }
 }