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