Commit | Line | Data |
36cf3bcb |
1 | package Tak::Router; |
2 | |
77bf1d9b |
3 | use Tak::MetaService; |
36cf3bcb |
4 | use Moo; |
5 | |
31a246e4 |
6 | has services => (is => 'ro', default => sub { {} }); |
36cf3bcb |
7 | |
77bf1d9b |
8 | sub BUILD { |
9 | my ($self) = @_; |
10 | $self->register(meta => Tak::MetaService->new(router => $self)); |
11 | } |
12 | |
31a246e4 |
13 | sub start_request { |
14 | my ($self, $req, $target, @payload) = @_; |
15 | $req->mistake("Reached router with no target") |
16 | unless $target; |
17 | $req->failure("Reached router with invalid target ${target}") |
18 | unless my $next = $self->services->{$target}; |
19 | $next->start_request($req, @payload); |
36cf3bcb |
20 | } |
21 | |
22 | sub receive { |
31a246e4 |
23 | my ($self, $target, @payload) = @_; |
24 | return unless $target; |
25 | return unless my $next = $self->services->{$target}; |
26 | $next->receive(@payload); |
36cf3bcb |
27 | } |
28 | |
8b6c1f59 |
29 | sub register { |
30 | my ($self, $name, $service) = @_; |
31a246e4 |
31 | $self->services->{$name} = $service; |
32 | } |
33 | |
34 | sub deregister { |
35 | my ($self, $name) = @_; |
36 | delete $self->services->{$name} |
8b6c1f59 |
37 | } |
38 | |
36cf3bcb |
39 | 1; |