… | |
… | |
40 | our %port; # our rendezvous port on the other side |
40 | our %port; # our rendezvous port on the other side |
41 | our %lreg; # local registry, name => [pid...] |
41 | our %lreg; # local registry, name => [pid...] |
42 | our %lmon; # local rgeistry monitoring name,pid => mon |
42 | our %lmon; # local rgeistry monitoring name,pid => mon |
43 | our %greg; # global regstry, name => [pid...] |
43 | our %greg; # global regstry, name => [pid...] |
44 | |
44 | |
|
|
45 | $AnyEvent::MP::Kernel::WARN->(7, "starting global service."); |
|
|
46 | |
45 | sub unreg_groups($) { |
47 | sub unreg_groups($) { |
46 | my ($noderef) = @_; |
48 | my ($noderef) = @_; |
47 | |
49 | |
48 | my $qr = qr/^\Q$noderef\E(?:#|$)/; |
50 | my $qr = qr/^\Q$noderef\E(?:#|$)/; |
49 | |
51 | |
… | |
… | |
52 | } |
54 | } |
53 | } |
55 | } |
54 | |
56 | |
55 | sub set_groups($$) { |
57 | sub set_groups($$) { |
56 | my ($noderef, $lreg) = @_; |
58 | my ($noderef, $lreg) = @_; |
|
|
59 | |
|
|
60 | use Data::Dumper; warn Dumper $lreg;#d# |
57 | } |
61 | } |
58 | |
62 | |
59 | =item $guard = register $port, $group |
63 | =item $guard = register $port, $group |
60 | |
64 | |
61 | Register the given (local!) port in the named global group C<$group>. |
65 | Register the given (local!) port in the named global group C<$group>. |
… | |
… | |
107 | |
111 | |
108 | sub start_node { |
112 | sub start_node { |
109 | my ($noderef) = @_; |
113 | my ($noderef) = @_; |
110 | |
114 | |
111 | return if exists $port{$noderef}; |
115 | return if exists $port{$noderef}; |
|
|
116 | return if $noderef eq $NODE; # do not connect to ourselves |
112 | |
117 | |
113 | # establish connection |
118 | # establish connection |
114 | my $port = $port{$noderef} = spawn $noderef, "AnyEvent::MP::Global::connect", $NODE; |
119 | my $port = $port{$noderef} = spawn $noderef, "AnyEvent::MP::Global::connect", 0, $NODE; |
115 | # request any other nodes possibly known to us |
120 | # request any other nodes possibly known to us |
116 | mon $port, sub { |
121 | mon $port, sub { |
117 | unreg_groups $noderef; |
122 | unreg_groups $noderef; |
118 | delete $port{$noderef}; |
123 | delete $port{$noderef}; |
119 | }; |
124 | }; |
120 | snd $port, connect_nodes => up_nodes; |
125 | snd $port, connect_nodes => up_nodes; |
121 | snd $port, set => \%greg; |
126 | snd $port, set => \%greg; |
122 | } |
127 | } |
123 | |
128 | |
|
|
129 | # other nodes connect via this |
124 | sub connect { |
130 | sub connect { |
125 | my ($noderef) = @_; |
131 | my ($version, $noderef) = @_; |
126 | |
132 | |
127 | # monitor them, silently die |
133 | # monitor them, silently die |
128 | mon $noderef, psub { kil $SELF }; |
134 | mon $noderef, psub { kil $SELF }; |
129 | |
135 | |
130 | warn "$SELF,$NODE\n";#d# |
|
|
131 | rcv $SELF, |
136 | rcv $SELF, |
132 | connect_nodes => sub { |
137 | connect_nodes => sub { |
133 | for (@_) { |
138 | for (@_) { |
134 | connect_node $_; |
139 | connect_node $_; |
135 | start_node $_; |
140 | start_node $_; |