add clone method
[scpubgit/Tak.git] / lib / Tak / ConnectionService.pm
CommitLineData
77bf1d9b 1package Tak::ConnectionService;
2
3use Tak::ConnectionReceiver;
4use Tak::JSONChannel;
5use Moo;
6
7has receiver => (is => 'ro', writer => '_set_receiver');
8
9has channel => (is => 'ro', writer => '_set_channel');
10
11sub 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(
986f5290 18 channel => $channel, service => $args->{listening_service},
19 on_close => $args->{on_close},
77bf1d9b 20 )
21 );
22}
23
24sub start_request {
25 my ($self, $req, @payload) = @_;
26 $self->receiver->requests->{my $tag = "$req"} = $req;
27 my $meta = { progress => !!$req->on_progress };
28 $self->channel->write_message(request => $tag => $meta => @payload);
29}
30
31sub receive {
32 my ($self, @payload) = @_;
33 $self->channel->write_message(message => @payload);
34}
35
361;