cleaned up worker_interface - consolidated long poll handling
authorForrest Voight <forrest@forre.st>
Fri, 23 Dec 2011 06:37:35 +0000 (01:37 -0500)
committerForrest Voight <forrest@forre.st>
Fri, 23 Dec 2011 07:06:28 +0000 (02:06 -0500)
p2pool/bitcoin/worker_interface.py

index 5d82312..5b36b68 100644 (file)
@@ -17,9 +17,6 @@ def get_username(request):
     except: # XXX
         return None
 
-def get_id(request):
-    return request.getClientIP(), request.getHeader('Authorization')
-
 class LongPollingWorkerInterface(jsonrpc.Server):
     def __init__(self, parent):
         jsonrpc.Server.__init__(self)
@@ -56,19 +53,20 @@ class WorkerInterface(jsonrpc.Server):
         if data is not None:
             defer.returnValue(self.response_callback(getwork.decode_data(data), request))
         
-        request_id = get_id(request)
-        
         if p2pool.DEBUG:
             id = random.randrange(1000, 10000)
             print 'POLL %i START long_poll=%r user_agent=%r x-work-identifier=%r user=%r' % (id, long_poll, request.getHeader('User-Agent'), request.getHeader('X-Work-Identifier'), get_username(request))
         
-        if request_id not in self.worker_views:
-            self.worker_views[request_id] = variable.Variable(None)
-        
-        if long_poll and self.worker_views[request_id].value in [None, self.new_work_event.times]:
-            if p2pool.DEBUG:
-                print 'POLL %i WAITING user=%r' % (id, get_username(request))
-            yield self.new_work_event.get_deferred()
+        if long_poll:
+            request_id = request.getClientIP(), request.getHeader('Authorization')
+            if self.worker_views.get(request_id, self.new_work_event.times) != self.new_work_event.times:
+                if p2pool.DEBUG:
+                    print 'POLL %i PUSH user=%r' % (id, get_username(request))
+            else:
+                if p2pool.DEBUG:
+                    print 'POLL %i WAITING user=%r' % (id, get_username(request))
+                yield self.new_work_event.get_deferred()
+                self.worker_views[request_id] = self.new_work_event.times
         
         username = get_username(request)
         
@@ -79,9 +77,6 @@ class WorkerInterface(jsonrpc.Server):
         
         self.work_cache[username] = res.update(timestamp=res.timestamp + 12), identifier # XXX doesn't bound timestamp
         
-        if long_poll:
-            self.worker_views[request_id].set(self.new_work_event.times)
-        
         if p2pool.DEBUG:
             print 'POLL %i END %s user=%r' % (id, p2pool_data.format_hash(identifier), get_username(request)) # XXX identifier is hack