Commit | Line | Data |
77bf1d9b |
1 | package Tak::ConnectionService; |
2 | |
3 | use Tak::ConnectionReceiver; |
4 | use Tak::JSONChannel; |
5 | use Moo; |
6 | |
7 | has receiver => (is => 'ro', writer => '_set_receiver'); |
8 | |
9 | has channel => (is => 'ro', writer => '_set_channel'); |
10 | |
11 | sub BUILD { |
12 | my ($self, $args) = @_; |
13 | my $channel = $self->_set_channel( |
14 | Tak::JSONChannel->new(map +($_ => $args->{$_}), qw(read_fh write_fh)) |
15 | ); |
16 | my $receiver = $self->_set_receiver( |
17 | Tak::ConnectionReceiver->new( |
18 | channel => $channel, service => $args->{listening_service} |
19 | ) |
20 | ); |
21 | } |
22 | |
23 | sub start_request { |
24 | my ($self, $req, @payload) = @_; |
25 | $self->receiver->requests->{my $tag = "$req"} = $req; |
26 | my $meta = { progress => !!$req->on_progress }; |
27 | $self->channel->write_message(request => $tag => $meta => @payload); |
28 | } |
29 | |
30 | sub receive { |
31 | my ($self, @payload) = @_; |
32 | $self->channel->write_message(message => @payload); |
33 | } |
34 | |
35 | 1; |