add meta service
[scpubgit/Tak.git] / lib / Tak / World.pm
CommitLineData
8b6c1f59 1package Tak::World;
2
3use Tak::JSONChannel;
4use Tak::ServiceManager;
8b6c1f59 5use Tak::ModuleLoader;
6use Tak::Router;
7use Tak::Remote;
8
9use Moo;
10
11has channel_args => (is => 'ro', required => 1);
12
13sub 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
19has router => (is => 'lazy');
20
21sub _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
38 unshift @INC, $loader->inc_callback;
39
40 return $router;
41}
42
43sub run { shift->router->run }
44
451;