message IDs
This commit is contained in:
parent
f33e347fad
commit
47f466cbe1
|
@ -208,6 +208,8 @@ class TCPInterface(Interface):
|
||||||
|
|
||||||
def __init__(self, host, port):
|
def __init__(self, host, port):
|
||||||
Interface.__init__(self, host, port)
|
Interface.__init__(self, host, port)
|
||||||
|
self.message_id = 0
|
||||||
|
self.messages = {}
|
||||||
|
|
||||||
self.tx_event = threading.Event()
|
self.tx_event = threading.Event()
|
||||||
self.addresses_waiting_for_status = []
|
self.addresses_waiting_for_status = []
|
||||||
|
@ -217,18 +219,11 @@ class TCPInterface(Interface):
|
||||||
self.up_to_date_event = threading.Event()
|
self.up_to_date_event = threading.Event()
|
||||||
self.up_to_date_event.clear()
|
self.up_to_date_event.clear()
|
||||||
|
|
||||||
def send(self, cmd, params = []):
|
def send(self, method, params = []):
|
||||||
request = json.dumps( { 'method':cmd, 'params':params } )
|
request = json.dumps( { 'id':self.message_id, 'method':method, 'params':params } )
|
||||||
|
self.messages[self.message_id] = (method, params)
|
||||||
self.s.send( request + '\n' )
|
self.s.send( request + '\n' )
|
||||||
|
self.message_id += 1
|
||||||
def send_tx(self, data):
|
|
||||||
self.tx_event.clear()
|
|
||||||
self.send('transaction.broadcast', data )
|
|
||||||
print "waiting for event.."
|
|
||||||
self.tx_event.wait()
|
|
||||||
out = self.tx_result
|
|
||||||
print "result:", out
|
|
||||||
return out
|
|
||||||
|
|
||||||
def listen_thread(self, wallet):
|
def listen_thread(self, wallet):
|
||||||
try:
|
try:
|
||||||
|
@ -248,36 +243,45 @@ class TCPInterface(Interface):
|
||||||
c = out[0:s]
|
c = out[0:s]
|
||||||
out = out[s+1:]
|
out = out[s+1:]
|
||||||
c = json.loads(c)
|
c = json.loads(c)
|
||||||
cmd = c.get('method')
|
|
||||||
data = c.get('result')
|
|
||||||
|
|
||||||
if cmd == 'server.banner':
|
#print c
|
||||||
self.message = data
|
msg_id = c.get('id')
|
||||||
|
result = c.get('result')
|
||||||
|
error = c.get('error')
|
||||||
|
|
||||||
|
if msg_id is None:
|
||||||
|
print "error: message without ID"
|
||||||
|
continue
|
||||||
|
|
||||||
|
method, params = self.messages[msg_id]
|
||||||
|
|
||||||
|
if method == 'server.banner':
|
||||||
|
self.message = result
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
|
|
||||||
elif cmd == 'server.peers':
|
elif method == 'server.peers':
|
||||||
self.servers = map( lambda x:x[1], data )
|
self.servers = map( lambda x:x[1], result )
|
||||||
|
|
||||||
elif cmd == 'transaction.broadcast':
|
elif method == 'address.subscribe':
|
||||||
self.tx_result = data
|
addr = params[0]
|
||||||
self.tx_event.set()
|
|
||||||
|
|
||||||
elif cmd == 'numblocks.subscribe':
|
|
||||||
self.blocks = data
|
|
||||||
|
|
||||||
elif cmd =='address.subscribe':
|
|
||||||
addr = c.get('address')
|
|
||||||
status = c.get('status')
|
|
||||||
if addr in self.addresses_waiting_for_status:
|
if addr in self.addresses_waiting_for_status:
|
||||||
self.addresses_waiting_for_status.remove(addr)
|
self.addresses_waiting_for_status.remove(addr)
|
||||||
wallet.receive_status_callback(addr, status)
|
wallet.receive_status_callback(addr, result)
|
||||||
|
|
||||||
elif cmd == 'address.get_history':
|
elif method == 'address.get_history':
|
||||||
addr = c.get('address')
|
addr = params[0]
|
||||||
if addr in self.addresses_waiting_for_history:
|
if addr in self.addresses_waiting_for_history:
|
||||||
self.addresses_waiting_for_history.remove(addr)
|
self.addresses_waiting_for_history.remove(addr)
|
||||||
wallet.receive_history_callback(addr, data)
|
wallet.receive_history_callback(addr, result)
|
||||||
self.was_updated = True
|
self.was_updated = True
|
||||||
|
|
||||||
|
elif method == 'transaction.broadcast':
|
||||||
|
self.tx_result = result
|
||||||
|
self.tx_event.set()
|
||||||
|
|
||||||
|
elif method == 'numblocks.subscribe':
|
||||||
|
self.blocks = result
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "received message:", c
|
print "received message:", c
|
||||||
|
|
||||||
|
@ -295,15 +299,21 @@ class TCPInterface(Interface):
|
||||||
def update_wallet(self,wallet):
|
def update_wallet(self,wallet):
|
||||||
self.up_to_date_event.wait()
|
self.up_to_date_event.wait()
|
||||||
|
|
||||||
|
def send_tx(self, data):
|
||||||
|
self.tx_event.clear()
|
||||||
|
self.send('transaction.broadcast', [data] )
|
||||||
|
self.tx_event.wait()
|
||||||
|
return self.tx_result
|
||||||
|
|
||||||
def subscribe(self,address):
|
def subscribe(self,address):
|
||||||
self.send('address.subscribe', address)
|
self.send('address.subscribe', [address])
|
||||||
self.addresses_waiting_for_status.append(address)
|
self.addresses_waiting_for_status.append(address)
|
||||||
|
|
||||||
def get_servers(self):
|
def get_servers(self):
|
||||||
self.send('server.peers')
|
self.send('server.peers')
|
||||||
|
|
||||||
def get_history(self,addr):
|
def get_history(self,addr):
|
||||||
self.send('address.get_history', addr)
|
self.send('address.get_history', [addr])
|
||||||
self.addresses_waiting_for_history.append(addr)
|
self.addresses_waiting_for_history.append(addr)
|
||||||
|
|
||||||
def start_session(self, wallet):
|
def start_session(self, wallet):
|
||||||
|
@ -311,7 +321,7 @@ class TCPInterface(Interface):
|
||||||
self.s.settimeout(1)
|
self.s.settimeout(1)
|
||||||
self.s.connect(( self.host, self.port))
|
self.s.connect(( self.host, self.port))
|
||||||
thread.start_new_thread(self.listen_thread, (wallet,))
|
thread.start_new_thread(self.listen_thread, (wallet,))
|
||||||
self.send('client.version', wallet.electrum_version)
|
self.send('client.version', [wallet.electrum_version])
|
||||||
self.send('server.banner')
|
self.send('server.banner')
|
||||||
self.send('numblocks.subscribe')
|
self.send('numblocks.subscribe')
|
||||||
for address in wallet.all_addresses():
|
for address in wallet.all_addresses():
|
||||||
|
|
Loading…
Reference in New Issue