7d1d7d6aadaf53ffdf6bd2fba6abc4da6ebf72b0
[scpubgit/Tak.git] / lib / Tak / Remote.pm
1 package Tak::Remote;
2
3 use Moo;
4
5 has router => (is => 'ro', required => 1);
6
7 has name => (is => 'ro', required => 1);
8
9 sub blocking_request {
10   my ($self, @payload) = @_;
11   local our $Request = $self->router->send_request($self, $self->name, @payload);
12   local our $Done;
13   local our @Result;
14   $self->router->run_until($Done);
15   return @Result;
16 }
17
18 sub send_response {
19   my ($self, $tag, @result) = @_;
20   {
21     our $Request;
22     die "Out of order response ${\$Request->tag}, expecting ${tag}"
23       if $Request->tag ne $tag;
24   }
25   our @Result = @result;
26   our $Done = 1;
27 }
28
29 1;