[Archipelago-submits] [208] trunk/archipelago: made subscriptions more dynamic by allowing more subscriptions with different ids
nobody at rubyforge.org
nobody at rubyforge.org
Fri Feb 9 05:43:04 EST 2007
Revision: 208
Author: zond
Date: 2007-02-09 05:43:03 -0500 (Fri, 09 Feb 2007)
Log Message:
-----------
made subscriptions more dynamic by allowing more subscriptions with different ids
Modified Paths:
--------------
trunk/archipelago/lib/archipelago/disco.rb
trunk/archipelago/lib/archipelago/dump.rb
trunk/archipelago/tests/disco_test.rb
Modified: trunk/archipelago/lib/archipelago/disco.rb
===================================================================
--- trunk/archipelago/lib/archipelago/disco.rb 2007-02-08 16:56:30 UTC (rev 207)
+++ trunk/archipelago/lib/archipelago/disco.rb 2007-02-09 10:43:03 UTC (rev 208)
@@ -249,7 +249,7 @@
# Returns our semi-unique id so that we can be found again.
#
def service_id
- return @metadata["service_id"]
+ return @service_id ||= @metadata["service_id"]
end
end
@@ -472,15 +472,15 @@
#
# Recognized +event_types+: :found, :lost
#
- def subscribe(event_type, match, &block)
- @service_change_subscribers_by_event_type[event_type][match] = block
+ def subscribe(event_type, match, identity, &block)
+ @service_change_subscribers_by_event_type[event_type][[match, identity]] = block
end
#
# Will stop listening for +event_type+ and +match+.
#
- def unsubscribe(event_type, match)
- @service_change_subscribers_by_event_type[event_type].delete(match)
+ def unsubscribe(event_type, match, identity)
+ @service_change_subscribers_by_event_type[event_type].delete([match, identity])
end
#
@@ -636,7 +636,8 @@
# Will notify all subscribers to +event_type+ looking for +record+.
#
def notify_subscribers(event_type, record)
- @service_change_subscribers_by_event_type[event_type].each do |query, proc|
+ @service_change_subscribers_by_event_type[event_type].each do |query_and_identity, proc|
+ query = query_and_identity.first
proc.call(record) if record.matches?(query)
end
end
Modified: trunk/archipelago/lib/archipelago/dump.rb
===================================================================
--- trunk/archipelago/lib/archipelago/dump.rb 2007-02-08 16:56:30 UTC (rev 207)
+++ trunk/archipelago/lib/archipelago/dump.rb 2007-02-09 10:43:03 UTC (rev 208)
@@ -62,17 +62,17 @@
def around_publish(&publish_block)
yield
- @officer.subscribe(:found, @officer.site_description) do |record|
+ @officer.subscribe(:found, @officer.site_description, service_id) do |record|
found_peer(record)
end
- @officer.subscribe(:lost, @officer.site_description) do |record|
+ @officer.subscribe(:lost, @officer.site_description, service_id) do |record|
lost_peer(record)
end
end
def around_stop(&block)
- @officer.unsubscribe(:found, @officer.site_description)
- @officer.unsubscribe(:lost, @officer.site_description)
+ @officer.unsubscribe(:found, @officer.site_description, service_id)
+ @officer.unsubscribe(:lost, @officer.site_description, service_id)
yield
end
@@ -109,8 +109,6 @@
@officer.next_to(service_id)
end
- private
-
def found_peer(record)
Thread.new do
if master_to?(record[:service_id])
Modified: trunk/archipelago/tests/disco_test.rb
===================================================================
--- trunk/archipelago/tests/disco_test.rb 2007-02-08 16:56:30 UTC (rev 207)
+++ trunk/archipelago/tests/disco_test.rb 2007-02-09 10:43:03 UTC (rev 208)
@@ -69,10 +69,10 @@
found_it = false
found_wrong = false
- @d2.subscribe(:found, Archipelago::Disco::Query.new(:epa => "blar2")) do
+ @d2.subscribe(:found, Archipelago::Disco::Query.new(:epa => "blar2"), 1) do
found_it = true
end
- @d2.subscribe(:found, Archipelago::Disco::Query.new(:epa => "blar2x")) do
+ @d2.subscribe(:found, Archipelago::Disco::Query.new(:epa => "blar2x"), 1) do
found_wrong = true
end
@@ -100,13 +100,17 @@
lost_it = false
lost_wrong = false
-
- @d2.subscribe(:lost, Archipelago::Disco::Query.new(:epa => "blar")) do
+
+ @d2.subscribe(:lost, Archipelago::Disco::Query.new(:epa => "blar"), 1) do
lost_it = true
end
- @d2.subscribe(:lost, Archipelago::Disco::Query.new(:epa => "blarx")) do
+ @d2.subscribe(:lost, Archipelago::Disco::Query.new(:epa => "blarx"), 1) do
lost_wrong = true
end
+ @d2.subscribe(:lost, Archipelago::Disco::Query.new(:epa => "blarx"), 2) do
+ lost_wrong = true
+ end
+ @d2.unsubscribe(:lost, Archipelago::Disco::Query.new(:epa => "blarx"), 2)
assert(@d2.lookup(Archipelago::Disco::Query.new(:epa => "blar"), 0).empty?)
More information about the Archipelago-submits
mailing list