new Client/Router/Service arch
[scpubgit/Tak.git] / lib / Tak / Router.pm
CommitLineData
36cf3bcb 1package Tak::Router;
2
36cf3bcb 3use Moo;
4
31a246e4 5has services => (is => 'ro', default => sub { {} });
36cf3bcb 6
31a246e4 7sub 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
16sub 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 23sub register {
24 my ($self, $name, $service) = @_;
31a246e4 25 $self->services->{$name} = $service;
26}
27
28sub deregister {
29 my ($self, $name) = @_;
30 delete $self->services->{$name}
8b6c1f59 31}
32
36cf3bcb 331;