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