Commit | Line | Data |
857f4834 |
1 | package Tak::MetaService; |
2 | |
2791fd73 |
3 | use Tak::WeakClient; |
857f4834 |
4 | use Moo; |
5 | |
31a246e4 |
6 | with 'Tak::Role::Service'; |
7 | |
857f4834 |
8 | has router => (is => 'ro', required => 1, weak_ref => 1); |
9 | |
77bf1d9b |
10 | sub handle_pid { |
11 | return $$; |
12 | } |
13 | |
857f4834 |
14 | sub handle_register { |
2791fd73 |
15 | my ($self, $name, $class, %args) = @_; |
857f4834 |
16 | (my $file = $class) =~ s/::/\//g; |
17 | require "${file}.pm"; |
2791fd73 |
18 | if (my $expose = delete $args{expose}) { |
19 | my $client = Tak::WeakClient->new(service => $self->router); |
20 | foreach my $name (%$expose) { |
21 | $args{$name} = $client->curry(@{$expose->{$name}}); |
22 | } |
23 | } |
24 | my $new = $class->new(\%args); |
857f4834 |
25 | $self->router->register($name => $new); |
31a246e4 |
26 | return "Registered ${name}"; |
857f4834 |
27 | } |
28 | |
29 | 1; |