ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Global.pm
(Generate patch)

Comparing AnyEvent-MP/MP/Global.pm (file contents):
Revision 1.13 by root, Fri Aug 28 16:37:30 2009 UTC vs.
Revision 1.14 by root, Fri Aug 28 20:57:42 2009 UTC

49 49
50############################################################################# 50#############################################################################
51# seednodes 51# seednodes
52 52
53our @SEEDS; 53our @SEEDS;
54our %SEED_CONNECT;
54our $SEED_WATCHER; 55our $SEED_WATCHER;
55 56
56sub seed_connect { 57sub seed_connect {
57 my ($seed) = @_; 58 my ($seed) = @_;
58 59
59 my ($host, $port) = AnyEvent::Socket::parse_hostport $seed 60 my ($host, $port) = AnyEvent::Socket::parse_hostport $seed
60 or Carp::croak "$seed: unparsable seed address"; 61 or Carp::croak "$seed: unparsable seed address";
61 62
62 # ughhh 63 # ughhh
63 my $tp; $tp = AnyEvent::MP::Transport::mp_connect $host, $port, 64 $SEED_CONNECT{$seed} ||= AnyEvent::MP::Transport::mp_connect $host, $port,
64 release => \&more_seeding, 65 seed => $seed,
65 sub { 66 sub {
66 $tp = shift; 67 delete $SEED_CONNECT{$seed};
67 $tp->{keepalive} = $tp; 68 after 1, \&more_seeding;
68 }, 69 },
69 ; 70 ;
70} 71}
71 72
72sub more_seeding { 73sub more_seeding {
73 return;#d##TODO#
74 return if $nodecnt; 74 return if $nodecnt;
75 return unless @SEEDS; 75 return unless @SEEDS;
76 76
77 $AnyEvent::MP::Kernel::WARN->(9, "no nodes connected, seeding."); 77 $AnyEvent::MP::Kernel::WARN->(9, "no nodes connected, seeding.");
78 78
79 seed_connect $SEEDS[rand @SEEDS]; 79 seed_connect $SEEDS[rand @SEEDS];
80}
81
82sub avoid_seed($) {
83 @SEEDS = grep $_ ne $_[0], @SEEDS;
80} 84}
81 85
82sub set_seeds(@) { 86sub set_seeds(@) {
83 @SEEDS = @_; 87 @SEEDS = @_;
84 88
205 mon $node, psub { kil $SELF }; 209 mon $node, psub { kil $SELF };
206 210
207 rcv $SELF, 211 rcv $SELF,
208 addr => sub { 212 addr => sub {
209 my $addresses = shift; 213 my $addresses = shift;
210 $AnyEvent::MP::Kernel::WARN->(9, "$node told us it's addresses (@$addresses)."); 214 $AnyEvent::MP::Kernel::WARN->(9, "$node told us its addresses (@$addresses).");
211 $addr{$node} = $addresses; 215 $addr{$node} = $addresses;
212 216
213 # to help listener-less nodes, we broadcast new addresses to them unconditionally 217 # to help listener-less nodes, we broadcast new addresses to them unconditionally
214 #TODO: should be done by a node finding out about a listener-less one 218 #TODO: should be done by a node finding out about a listener-less one
215 if (@$addresses) { 219 if (@$addresses) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines