… | |
… | |
55 | } |
55 | } |
56 | |
56 | |
57 | sub set_groups($$) { |
57 | sub set_groups($$) { |
58 | my ($noderef, $lreg) = @_; |
58 | my ($noderef, $lreg) = @_; |
59 | |
59 | |
60 | use Data::Dumper; warn Dumper $lreg;#d# |
60 | while (my ($k, $v) = each %$lreg) { |
|
|
61 | push @{ $greg{$k} }, @$v; |
|
|
62 | } |
61 | } |
63 | } |
62 | |
64 | |
63 | =item $guard = register $port, $group |
65 | =item $guard = register $port, $group |
64 | |
66 | |
65 | Register the given (local!) port in the named global group C<$group>. |
67 | Register the given (local!) port in the named global group C<$group>. |
… | |
… | |
74 | # register port from any node |
76 | # register port from any node |
75 | sub _register { |
77 | sub _register { |
76 | my ($port, $group) = @_; |
78 | my ($port, $group) = @_; |
77 | |
79 | |
78 | push @{ $greg{$group} }, $port; |
80 | push @{ $greg{$group} }, $port; |
|
|
81 | } |
|
|
82 | |
|
|
83 | # unregister port from any node |
|
|
84 | sub _unregister { |
|
|
85 | my ($port, $group) = @_; |
|
|
86 | |
|
|
87 | @{ $greg{$group} } = grep $_ ne $port, @{ $greg{$group} }; |
79 | } |
88 | } |
80 | |
89 | |
81 | # unregister local port |
90 | # unregister local port |
82 | sub unregister { |
91 | sub unregister { |
83 | my ($port, $group) = @_; |
92 | my ($port, $group) = @_; |
… | |
… | |
121 | mon $port, sub { |
130 | mon $port, sub { |
122 | unreg_groups $noderef; |
131 | unreg_groups $noderef; |
123 | delete $port{$noderef}; |
132 | delete $port{$noderef}; |
124 | }; |
133 | }; |
125 | snd $port, connect_nodes => up_nodes; |
134 | snd $port, connect_nodes => up_nodes; |
126 | snd $port, set => \%greg; |
135 | snd $port, set => \%lreg; |
127 | } |
136 | } |
128 | |
137 | |
129 | # other nodes connect via this |
138 | # other nodes connect via this |
130 | sub connect { |
139 | sub connect { |
131 | my ($version, $noderef) = @_; |
140 | my ($version, $noderef) = @_; |
… | |
… | |
139 | connect_node $_; |
148 | connect_node $_; |
140 | start_node $_; |
149 | start_node $_; |
141 | } |
150 | } |
142 | }, |
151 | }, |
143 | set => sub { |
152 | set => sub { |
144 | unreg_groups $noderef; |
|
|
145 | set_groups $noderef, shift; |
153 | set_groups $noderef, shift; |
146 | }, |
154 | }, |
147 | reg1 => \&_register, |
155 | reg1 => \&_register, |
148 | reg0 => \&_unregister, |
156 | reg0 => \&_unregister, |
149 | ; |
157 | ; |