added methods to Tracker to be notified on items being added or removed. added a...
authorForrest Voight <forrest@forre.st>
Wed, 10 Aug 2011 04:57:11 +0000 (00:57 -0400)
committerForrest Voight <forrest@forre.st>
Wed, 10 Aug 2011 04:57:11 +0000 (00:57 -0400)
p2pool/bitcoin/data.py
p2pool/data.py

index b6886b4..183b912 100644 (file)
@@ -5,7 +5,7 @@ import itertools
 import struct
 
 from . import base58, skiplists
-from p2pool.util import bases, math, skiplist
+from p2pool.util import bases, math, skiplist, variable
 import p2pool
 
 class EarlyEnd(Exception):
@@ -481,6 +481,9 @@ class Tracker(object):
         '''
         
         self.get_nth_parent_hash = skiplists.DistanceSkipList(self)
+        
+        self.added = variable.Event()
+        self.removed = variable.Event()
     
     def add(self, share):
         assert not isinstance(share, (int, long, type(None)))
@@ -523,6 +526,8 @@ class Tracker(object):
         
         for head in heads:
             self.heads[head] = tail
+        
+        self.added.happened(share)
     
     def test(self):
         t = Tracker()
@@ -625,6 +630,7 @@ class Tracker(object):
             self.reverse_shares.pop(share.previous_hash)
         
         #assert self.test() is None
+        self.removed.happened(share)
     
     def get_height(self, share_hash):
         height, work, last = self.get_height_work_and_last(share_hash)
index 2827649..0bfba83 100644 (file)
@@ -279,6 +279,11 @@ class OkayTracker(bitcoin_data.Tracker):
         self.verified = bitcoin_data.Tracker()
         
         self.get_cumulative_weights = skiplists.WeightsSkipList(self)
+
+    def add(self, share, known_verified=False):
+        bitcoin_data.Tracker.add(self, share)
+        if known_verified:
+            self.verified.add(share)
     
     def attempt_verify(self, share, now):
         if share.hash in self.verified.shares: