re-use pending_servers to avoid sending unnecessary notifications

This commit is contained in:
ThomasV 2014-08-04 11:29:58 +02:00
parent 5d1e229f05
commit ecdb90b0b7
1 changed files with 16 additions and 8 deletions

View File

@ -101,6 +101,7 @@ class Network(threading.Thread):
self.disconnected_time = time.time()
self.recent_servers = self.config.get('recent_servers',[]) # successful connections
self.pending_servers = set()
self.banner = ''
self.interface = None
@ -164,7 +165,7 @@ class Network(threading.Thread):
choice_list = []
l = filter_protocol(self.get_servers(), self.protocol)
for s in l:
if s in self.disconnected_servers or s in self.interfaces.keys():
if s in self.pending_servers or s in self.disconnected_servers or s in self.interfaces.keys():
continue
else:
choice_list.append(s)
@ -199,8 +200,7 @@ class Network(threading.Thread):
if server in self.interfaces.keys():
return
i = interface.Interface(server, self.config)
self.interfaces[i.server] = i
self.notify('interfaces')
self.pending_servers.add(server)
i.start(self.queue)
return i
@ -256,8 +256,7 @@ class Network(threading.Thread):
self.switch_to_interface(i)
break
else:
self.interfaces.pop(i.server)
self.notify('interfaces')
self.remove_interface(i)
def switch_to_interface(self, interface):
server = interface.server
@ -306,6 +305,14 @@ class Network(threading.Thread):
self.config.set_key('recent_servers', self.recent_servers)
def add_interface(self, i):
self.interfaces[i.server] = i
self.notify('interfaces')
def remove_interface(self, i):
self.interfaces.pop(i.server)
self.notify('interfaces')
def new_blockchain_height(self, blockchain_height, i):
if self.is_connected():
if self.server_is_lagging():
@ -385,8 +392,11 @@ class Network(threading.Thread):
continue
# if response is None it is a notification about the interface
if i.server in self.pending_servers:
self.pending_servers.remove(i.server)
if i.is_connected:
self.add_interface(i)
self.add_recent_server(i)
i.send_request({'method':'blockchain.headers.subscribe','params':[]})
if i == self.interface:
@ -396,12 +406,10 @@ class Network(threading.Thread):
else:
self.disconnected_servers.add(i.server)
if i.server in self.interfaces:
self.interfaces.pop(i.server)
self.notify('interfaces')
self.remove_interface(i)
if i.server in self.heights:
self.heights.pop(i.server)
if i == self.interface:
#self.interface = None
self.set_status('disconnected')
if not self.interface.is_connected and self.config.get('auto_cycle'):