1 from __future__ import division
6 from twisted.internet import defer
8 from util import jsonrpc, deferred_resource
10 class LongPollingWorkerInterface(deferred_resource.DeferredResource):
11 def __init__(self, work, compute):
13 self.compute = compute
15 @defer.inlineCallbacks
16 def render_GET(self, request):
17 request.setHeader('X-Long-Polling', '/long-polling')
19 res = self.compute((yield self.work.changed.get_deferred()))
21 request.write(json.dumps({
27 render_POST = render_GET
29 class WorkerInterface(jsonrpc.Server):
31 'X-Long-Polling': '/long-polling',
34 def __init__(self, work, compute, response_callback):
35 jsonrpc.Server.__init__(self)
38 self.compute = compute
39 self.response_callback = response_callback
41 self.putChild('long-polling',
42 LongPollingWorkerInterface(self.work, self.compute))
43 self.putChild('', self)
45 def rpc_getwork(self, data=None):
47 return self.response_callback(data)
49 return self.compute(self.work.value)