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