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)
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)
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