Commit | Line | Data |
8b6c1f59 |
1 | package Tak::World; |
2 | |
3 | use Tak::JSONChannel; |
4 | use Tak::ServiceManager; |
8b6c1f59 |
5 | use Tak::ModuleLoader; |
6 | use Tak::Router; |
7 | use Tak::Remote; |
8 | |
9 | use Moo; |
10 | |
11 | has channel_args => (is => 'ro', required => 1); |
12 | |
13 | sub new_from_stdio { |
14 | open my $stdin, '<&', \*STDIN; |
15 | open my $stdout, '>&', \*STDOUT; |
16 | shift->new(channel_args => { read_fh => $stdin, write_fh => $stdout }); |
17 | } |
18 | |
19 | has router => (is => 'lazy'); |
20 | |
21 | sub _build_router { |
22 | my ($self) = @_; |
23 | my $channel = Tak::JSONChannel->new($self->channel_args); |
24 | |
25 | my $router = Tak::Router->new( |
26 | channel => $channel |
27 | ); |
28 | |
8b6c1f59 |
29 | my $remote = Tak::Remote->new( |
30 | router => $router, |
857f4834 |
31 | name => 'module_sender' |
8b6c1f59 |
32 | ); |
33 | |
34 | my $loader = Tak::ModuleLoader->new( |
35 | remote => $remote |
36 | ); |
37 | |
31a246e4 |
38 | push @INC, $loader->inc_callback; |
8b6c1f59 |
39 | |
40 | return $router; |
41 | } |
42 | |
43 | sub run { shift->router->run } |
44 | |
45 | 1; |