first working version for http/stratum
This commit is contained in:
parent
f9f26d4450
commit
ec37360258
|
@ -80,24 +80,27 @@ class Interface:
|
||||||
if error:
|
if error:
|
||||||
print "received error:", c, method, params
|
print "received error:", c, method, params
|
||||||
else:
|
else:
|
||||||
self.handle_response(method, params, result)
|
if method == 'session.poll': #embedded messages
|
||||||
|
if result:
|
||||||
|
self.is_up_to_date = False
|
||||||
|
for msg in result:
|
||||||
|
self.handle_json_response(msg)
|
||||||
|
else:
|
||||||
|
self.is_up_to_date = True
|
||||||
|
else:
|
||||||
|
self.handle_response(method, params, result)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def handle_response(self, method, params, result):
|
def handle_response(self, method, params, result):
|
||||||
|
|
||||||
if method == 'session.new':
|
if method == 'server.banner':
|
||||||
# print result, "do nothing"
|
|
||||||
# session id is in the cookie
|
|
||||||
|
|
||||||
self.session_id, self.message = ast.literal_eval( result )
|
|
||||||
self.was_updated = True
|
|
||||||
|
|
||||||
elif method == 'server.banner':
|
|
||||||
self.message = result
|
self.message = result
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
|
|
||||||
elif method == 'session.poll':
|
elif method == 'session.poll':
|
||||||
|
# native poll
|
||||||
blocks, changed_addresses = result
|
blocks, changed_addresses = result
|
||||||
if blocks == -1: raise BaseException("session not found")
|
if blocks == -1: raise BaseException("session not found")
|
||||||
self.blocks = int(blocks)
|
self.blocks = int(blocks)
|
||||||
|
@ -137,24 +140,24 @@ class Interface:
|
||||||
print "received message:", method, params, result
|
print "received message:", method, params, result
|
||||||
|
|
||||||
|
|
||||||
|
def subscribe(self, addresses):
|
||||||
|
messages = []
|
||||||
|
for addr in addresses:
|
||||||
|
messages.append(('address.subscribe', [addr]))
|
||||||
|
self.addresses_waiting_for_status.append(addr)
|
||||||
|
self.send(messages)
|
||||||
|
|
||||||
|
|
||||||
class PollingInterface(Interface):
|
class PollingInterface(Interface):
|
||||||
""" non-persistent connection. synchronous calls"""
|
""" non-persistent connection. synchronous calls"""
|
||||||
|
|
||||||
def start_session(self, addresses, version):
|
def start_session(self, addresses, version):
|
||||||
self.send([('session.new', [ version, addresses ])] )
|
self.send([('session.new', [ version, addresses ])] )
|
||||||
thread.start_new_thread(self.poll_thread, ())
|
thread.start_new_thread(self.poll_thread, (5,))
|
||||||
|
|
||||||
def poll_interval(self):
|
|
||||||
return 5
|
|
||||||
|
|
||||||
def get_history(self, address):
|
def get_history(self, address):
|
||||||
self.send([('address.get_history', [address] )])
|
self.send([('address.get_history', [address] )])
|
||||||
|
|
||||||
def subscribe(self, addresses):
|
|
||||||
for addr in addresses:
|
|
||||||
self.send([('address.subscribe', [ self.session_id, addr ] )])
|
|
||||||
|
|
||||||
def update_wallet(self):
|
def update_wallet(self):
|
||||||
while True:
|
while True:
|
||||||
self.send([('session.poll', [])])
|
self.send([('session.poll', [])])
|
||||||
|
@ -169,11 +172,11 @@ class PollingInterface(Interface):
|
||||||
#else:
|
#else:
|
||||||
# return False
|
# return False
|
||||||
|
|
||||||
def poll_thread(self):
|
def poll_thread(self, poll_interval):
|
||||||
while self.is_connected:
|
while self.is_connected:
|
||||||
try:
|
try:
|
||||||
self.update_wallet()
|
self.update_wallet()
|
||||||
time.sleep(self.poll_interval())
|
time.sleep(poll_interval)
|
||||||
except socket.gaierror:
|
except socket.gaierror:
|
||||||
break
|
break
|
||||||
except socket.error:
|
except socket.error:
|
||||||
|
@ -260,7 +263,11 @@ class NativeInterface(PollingInterface):
|
||||||
|
|
||||||
if out=='': out=None #fixme
|
if out=='': out=None #fixme
|
||||||
|
|
||||||
self.handle_response(method, params, out)
|
if cmd == 'new_session':
|
||||||
|
self.session_id, self.message = ast.literal_eval( out )
|
||||||
|
self.was_updated = True
|
||||||
|
else:
|
||||||
|
self.handle_response(method, params, out)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -271,10 +278,8 @@ class HttpInterface(PollingInterface):
|
||||||
def start_session(self, addresses, version):
|
def start_session(self, addresses, version):
|
||||||
self.session_id = None
|
self.session_id = None
|
||||||
self.send([('client.version', [version]), ('server.banner',[]), ('numblocks.subscribe',[])])
|
self.send([('client.version', [version]), ('server.banner',[]), ('numblocks.subscribe',[])])
|
||||||
|
self.subscribe(addresses)
|
||||||
#self.subscribe(addresses)
|
thread.start_new_thread(self.poll_thread, (15,))
|
||||||
|
|
||||||
thread.start_new_thread(self.poll_thread, ())
|
|
||||||
|
|
||||||
|
|
||||||
def send(self, messages):
|
def send(self, messages):
|
||||||
|
@ -294,13 +299,12 @@ class HttpInterface(PollingInterface):
|
||||||
self.message_id += 1
|
self.message_id += 1
|
||||||
|
|
||||||
data_json = json.dumps(data)
|
data_json = json.dumps(data)
|
||||||
print data_json
|
#print data_json
|
||||||
#host = 'http://%s:%d'%( self.host if method!='server.peers' else self.peers_server, self.port )
|
#host = 'http://%s:%d'%( self.host if method!='server.peers' else self.peers_server, self.port )
|
||||||
host = 'http://%s:%d'%( self.host, self.port )
|
host = 'http://%s:%d'%( self.host, self.port )
|
||||||
|
|
||||||
headers = {'content-type': 'application/json'}
|
headers = {'content-type': 'application/json'}
|
||||||
if self.session_id:
|
if self.session_id:
|
||||||
print "adding cookie in header"
|
|
||||||
headers['cookie'] = 'SESSION=%s'%self.session_id
|
headers['cookie'] = 'SESSION=%s'%self.session_id
|
||||||
|
|
||||||
req = urllib2.Request(host, data_json, headers)
|
req = urllib2.Request(host, data_json, headers)
|
||||||
|
@ -309,7 +313,6 @@ class HttpInterface(PollingInterface):
|
||||||
for index, cookie in enumerate(cj):
|
for index, cookie in enumerate(cj):
|
||||||
if cookie.name=='SESSION':
|
if cookie.name=='SESSION':
|
||||||
self.session_id = cookie.value
|
self.session_id = cookie.value
|
||||||
print "got session id from cookie", self.session_id
|
|
||||||
|
|
||||||
response = json.loads( response_stream.read() )
|
response = json.loads( response_stream.read() )
|
||||||
|
|
||||||
|
@ -370,13 +373,6 @@ class AsynchronousInterface(Interface):
|
||||||
out += request + '\n'
|
out += request + '\n'
|
||||||
self.s.send( out )
|
self.s.send( out )
|
||||||
|
|
||||||
def subscribe(self, addresses):
|
|
||||||
messages = []
|
|
||||||
for addr in addresses:
|
|
||||||
messages.append(('address.subscribe', [addr]))
|
|
||||||
self.addresses_waiting_for_status.append(addr)
|
|
||||||
self.send(messages)
|
|
||||||
|
|
||||||
def get_servers(self):
|
def get_servers(self):
|
||||||
self.send([('server.peers',[])])
|
self.send([('server.peers',[])])
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue