[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