Commit | Line | Data |
8da64ef2 |
1 | package Object::Remote::Role::LogForwarder; |
2 | |
3 | use Moo::Role; |
23591f5f |
4 | use Object::Remote::Logging; |
5 | use Scalar::Util qw(weaken); |
6 | use Carp qw(cluck); |
8da64ef2 |
7 | |
8 | with 'Log::Contextual::Role::Router'; |
9 | |
10 | #TODO re-weaken router references when object::remote |
11 | #weak reference operation is figured out |
12 | |
23591f5f |
13 | has child_routers => ( is => 'ro', required => 1, default => sub { [] } ); |
8da64ef2 |
14 | has parent_router => ( is => 'rw', );#weak_ref => 1 ); |
15 | |
23591f5f |
16 | sub BUILD { } |
17 | |
18 | after BUILD => sub { |
0511910e |
19 | my ($self) = @_; |
20 | # my $parent = $self->parent_router; |
21 | # return unless defined $parent ; |
22 | # $parent->add_child_router($self); |
23591f5f |
23 | }; |
24 | |
25 | sub describe { |
0511910e |
26 | my ($self, $depth) = @_; |
27 | $depth = -1 unless defined $depth; |
28 | $depth++; |
29 | my $buf = "\t" x $depth . $self->description . "\n"; |
30 | foreach my $child (@{$self->child_routers}) { |
31 | next unless defined $child; |
32 | $buf .= $child->describe($depth); |
33 | } |
23591f5f |
34 | |
0511910e |
35 | return $buf; |
23591f5f |
36 | } |
37 | |
8da64ef2 |
38 | sub add_child_router { |
0511910e |
39 | my ($self, $router) = @_; |
40 | push(@{ $self->child_routers }, $router); |
23591f5f |
41 | # weaken(${ $self->child_routers }[-1]); |
0511910e |
42 | return; |
8da64ef2 |
43 | } |
44 | |
23591f5f |
45 | #sub remove_child_router { |
46 | # my ($self, $description) = @_; |
47 | # return delete $self->child_routers->{$description}; |
48 | #} |
8da64ef2 |
49 | |
50 | after handle_log_message => sub { |
0511910e |
51 | my ($self, @args) = @_; |
52 | my $parent = $self->parent_router; |
8da64ef2 |
53 | |
0511910e |
54 | return unless defined $parent; |
55 | $parent->handle_log_message(@args); |
8da64ef2 |
56 | }; |
57 | |
58 | 1; |
0511910e |
59 | |