Browse Source

re-use pending_servers to avoid sending unnecessary notifications

283
ThomasV 11 years ago
parent
commit
ecdb90b0b7
  1. 24
      lib/network.py

24
lib/network.py

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

Loading…
Cancel
Save