network: fix server lag detection
This commit is contained in:
parent
7ca42d75ff
commit
bc15caa84c
|
@ -234,10 +234,7 @@ class NetworkDialog(QDialog):
|
||||||
else:
|
else:
|
||||||
proxy = None
|
proxy = None
|
||||||
|
|
||||||
self.config.set_key("proxy", proxy, True)
|
auto_connect = self.autocycle_cb.isChecked()
|
||||||
self.config.set_key("server", server, True)
|
|
||||||
self.network.set_proxy(proxy)
|
|
||||||
self.network.set_server(server)
|
|
||||||
|
|
||||||
self.config.set_key('auto_cycle', self.autocycle_cb.isChecked(), True)
|
self.network.set_parameters(server, proxy, auto_connect)
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -87,12 +87,14 @@ class Blockchain(threading.Thread):
|
||||||
print_error("height:", height, i.server)
|
print_error("height:", height, i.server)
|
||||||
for header in chain:
|
for header in chain:
|
||||||
self.save_header(header)
|
self.save_header(header)
|
||||||
self.height = height
|
|
||||||
else:
|
else:
|
||||||
print_error("error", i.server)
|
print_error("error", i.server)
|
||||||
# todo: dismiss that server
|
# todo: dismiss that server
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
|
if self.height != height:
|
||||||
|
self.height = height
|
||||||
self.network.new_blockchain_height(height, i)
|
self.network.new_blockchain_height(height, i)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -172,12 +172,41 @@ class Network(threading.Thread):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
self.interface.connect_event.wait()
|
self.interface.connect_event.wait()
|
||||||
|
|
||||||
def set_proxy(self, proxy):
|
|
||||||
|
def set_parameters(self, server, proxy, auto_connect):
|
||||||
|
|
||||||
|
self.config.set_key("proxy", proxy, True)
|
||||||
self.proxy = proxy
|
self.proxy = proxy
|
||||||
|
|
||||||
|
self.config.set_key('auto_cycle', auto_connect, True)
|
||||||
|
|
||||||
|
self.config.set_key("server", server, True)
|
||||||
|
|
||||||
|
if auto_connect:
|
||||||
|
if not self.interface:
|
||||||
|
self.switch_to_random_interface()
|
||||||
|
else:
|
||||||
|
if self.server_lag > 0:
|
||||||
|
self.interface.stop()
|
||||||
|
else:
|
||||||
|
self.set_server(server)
|
||||||
|
|
||||||
|
|
||||||
|
def switch_to_random_interface(self):
|
||||||
|
if self.interfaces:
|
||||||
|
self.switch_to_interface(random.choice(self.interfaces.values()))
|
||||||
|
|
||||||
|
def switch_to_interface(self, interface):
|
||||||
|
print_error("switching to", interface.server)
|
||||||
|
self.interface = interface
|
||||||
|
self.server_lag = self.blockchain.height - self.heights[self.interface.server]
|
||||||
|
self.config.set_key('server', self.interface.server, False)
|
||||||
|
self.send_subscriptions()
|
||||||
|
self.trigger_callback('connected')
|
||||||
|
|
||||||
|
|
||||||
def set_server(self, server):
|
def set_server(self, server):
|
||||||
if self.default_server == server:
|
if self.default_server == server and self.interface:
|
||||||
return
|
return
|
||||||
|
|
||||||
# stop the interface in order to terminate subscriptions
|
# stop the interface in order to terminate subscriptions
|
||||||
|
@ -188,10 +217,10 @@ class Network(threading.Thread):
|
||||||
self.trigger_callback('disconnecting')
|
self.trigger_callback('disconnecting')
|
||||||
# start interface
|
# start interface
|
||||||
self.default_server = server
|
self.default_server = server
|
||||||
|
self.config.set_key("server", server, True)
|
||||||
|
|
||||||
if server in self.interfaces.keys():
|
if server in self.interfaces.keys():
|
||||||
self.interface = self.interfaces[server]
|
self.switch_to_interface( self.interfaces[server] )
|
||||||
self.send_subscriptions()
|
|
||||||
else:
|
else:
|
||||||
self.start_interface(server)
|
self.start_interface(server)
|
||||||
self.interface = self.interfaces[server]
|
self.interface = self.interfaces[server]
|
||||||
|
@ -250,12 +279,8 @@ class Network(threading.Thread):
|
||||||
self.interface = None
|
self.interface = None
|
||||||
self.trigger_callback('disconnected')
|
self.trigger_callback('disconnected')
|
||||||
|
|
||||||
if self.interface is None and self.config.get('auto_cycle') and self.interfaces:
|
if self.interface is None and self.config.get('auto_cycle'):
|
||||||
self.interface = random.choice(self.interfaces.values())
|
self.switch_to_random_interface()
|
||||||
self.config.set_key('server', self.interface.server, False)
|
|
||||||
print_error("resending subscriptions after disconnect")
|
|
||||||
self.send_subscriptions()
|
|
||||||
self.trigger_callback('connected')
|
|
||||||
|
|
||||||
|
|
||||||
def on_header(self, i, r):
|
def on_header(self, i, r):
|
||||||
|
@ -264,6 +289,13 @@ class Network(threading.Thread):
|
||||||
self.heights[i.server] = result.get('block_height')
|
self.heights[i.server] = result.get('block_height')
|
||||||
self.blockchain.queue.put((i,result))
|
self.blockchain.queue.put((i,result))
|
||||||
|
|
||||||
|
if i == self.interface:
|
||||||
|
self.server_lag = self.blockchain.height - self.heights[i.server]
|
||||||
|
if self.server_lag:
|
||||||
|
print "on_header: lag", self.server_lag
|
||||||
|
self.trigger_callback('updated')
|
||||||
|
|
||||||
|
|
||||||
def on_peers(self, i, r):
|
def on_peers(self, i, r):
|
||||||
if not r: return
|
if not r: return
|
||||||
self.irc_servers = self.parse_servers(r.get('result'))
|
self.irc_servers = self.parse_servers(r.get('result'))
|
||||||
|
|
Loading…
Reference in New Issue