3041f02c8d08faec45642e6b0f3e2212c331be02
[scpubgit/Tak.git] / lib / Tak / Router.pm
1 package Tak::Router;
2
3 use Moo;
4
5 has services => (is => 'ro', default => sub { {} });
6
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);
14 }
15
16 sub receive {
17   my ($self, $target, @payload) = @_;
18   return unless $target;
19   return unless my $next = $self->services->{$target};
20   $next->receive(@payload);
21 }
22
23 sub register {
24   my ($self, $name, $service) = @_;
25   $self->services->{$name} = $service;
26 }
27
28 sub deregister {
29   my ($self, $name) = @_;
30   delete $self->services->{$name}
31 }
32
33 1;