mirror of
https://github.com/LBRYFoundation/LBRY-Vault.git
synced 2025-08-27 15:31:31 +00:00
connect to random servers, reconnect if connection is lost
This commit is contained in:
parent
0ec436c02c
commit
2df129cfbf
2 changed files with 46 additions and 46 deletions
|
@ -143,7 +143,6 @@ class Interface(threading.Thread):
|
||||||
|
|
||||||
elif method == 'server.banner':
|
elif method == 'server.banner':
|
||||||
self.banner = result
|
self.banner = result
|
||||||
print "banner"
|
|
||||||
self.network.trigger_callback('banner')
|
self.network.trigger_callback('banner')
|
||||||
|
|
||||||
elif method == 'server.peers.subscribe':
|
elif method == 'server.peers.subscribe':
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
|
import threading, time, Queue, os, sys, shutil, random
|
||||||
|
from util import user_dir, appdata_dir, print_error, print_msg
|
||||||
|
from bitcoin import *
|
||||||
import interface
|
import interface
|
||||||
from blockchain import Blockchain
|
from blockchain import Blockchain
|
||||||
import threading, time, Queue, os, sys, shutil
|
|
||||||
from util import user_dir, appdata_dir, print_error
|
|
||||||
from bitcoin import *
|
|
||||||
|
|
||||||
|
|
||||||
class Network(threading.Thread):
|
class Network(threading.Thread):
|
||||||
|
@ -34,25 +34,43 @@ class Network(threading.Thread):
|
||||||
[callback() for callback in callbacks]
|
[callback() for callback in callbacks]
|
||||||
|
|
||||||
|
|
||||||
|
def random_server(self):
|
||||||
|
if len(self.servers_list) <= len(self.interfaces.keys()):
|
||||||
|
return
|
||||||
|
|
||||||
|
while True:
|
||||||
|
server = random.choice( self.servers_list )
|
||||||
|
if server not in self.interfaces.keys(): break
|
||||||
|
|
||||||
|
return server
|
||||||
|
|
||||||
|
|
||||||
|
def start_interface(self, server):
|
||||||
|
if server in self.interfaces.keys():
|
||||||
|
return
|
||||||
|
i = interface.Interface({'server':server})
|
||||||
|
i.network = self # fixme
|
||||||
|
self.interfaces[server] = i
|
||||||
|
i.start(self.queue)
|
||||||
|
|
||||||
|
def start_random_interface(self):
|
||||||
|
server = self.random_server()
|
||||||
|
if server:
|
||||||
|
self.start_interface(server)
|
||||||
|
|
||||||
def start_interfaces(self):
|
def start_interfaces(self):
|
||||||
|
|
||||||
for server in self.servers_list:
|
|
||||||
self.interfaces[server] = interface.Interface({'server':server})
|
|
||||||
|
|
||||||
for i in self.interfaces.values():
|
|
||||||
i.network = self # fixme
|
|
||||||
i.start(self.queue)
|
|
||||||
|
|
||||||
if self.default_server:
|
if self.default_server:
|
||||||
self.interface = interface.Interface({'server':self.default_server})
|
self.start_interface(self.default_server)
|
||||||
self.interface.network = self # fixme
|
self.interface = self.interfaces[self.default_server]
|
||||||
self.interface.start(self.queue)
|
|
||||||
else:
|
for i in range(8):
|
||||||
self.interface = self.interfaces[0]
|
self.start_random_interface()
|
||||||
|
|
||||||
|
if not self.interface:
|
||||||
|
self.interface = self.interfaces.values()[0]
|
||||||
|
|
||||||
|
|
||||||
def start(self, wait=False):
|
def start(self, wait=False):
|
||||||
|
|
||||||
self.start_interfaces()
|
self.start_interfaces()
|
||||||
threading.Thread.start(self)
|
threading.Thread.start(self)
|
||||||
if wait:
|
if wait:
|
||||||
|
@ -60,7 +78,6 @@ class Network(threading.Thread):
|
||||||
return self.interface.is_connected
|
return self.interface.is_connected
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.blockchain.start()
|
self.blockchain.start()
|
||||||
|
|
||||||
|
@ -74,21 +91,25 @@ class Network(threading.Thread):
|
||||||
i.register_channel('verifier', self.blockchain.queue)
|
i.register_channel('verifier', self.blockchain.queue)
|
||||||
i.register_channel('get_header')
|
i.register_channel('get_header')
|
||||||
i.send([ ('blockchain.headers.subscribe',[])], 'verifier')
|
i.send([ ('blockchain.headers.subscribe',[])], 'verifier')
|
||||||
|
|
||||||
if i == self.interface:
|
if i == self.interface:
|
||||||
i.send([('server.banner',[])])
|
i.send([('server.banner',[])])
|
||||||
i.send([('server.peers.subscribe',[])])
|
i.send([('server.peers.subscribe',[])])
|
||||||
else:
|
else:
|
||||||
|
self.servers_list.remove(i.server)
|
||||||
self.interfaces.pop(i.server)
|
self.interfaces.pop(i.server)
|
||||||
|
self.start_random_interface()
|
||||||
|
|
||||||
if i == self.interface:
|
if i == self.interface:
|
||||||
if self.default_server is None:
|
if self.config.get('auto_cycle'):
|
||||||
print_msg("Using random server...")
|
self.interface = random.choice(self.interfaces.values())
|
||||||
server = random.choice( self.servers_list )
|
self.config.set_key('server', self.interface.server, False)
|
||||||
self.interface = interface.Interface({'server':self.default_server})
|
|
||||||
else:
|
else:
|
||||||
#i.trigger_callback('disconnected')
|
self.trigger_callback('disconnected')
|
||||||
pass
|
|
||||||
|
|
||||||
def on_peers(self, resut):
|
def on_peers(self, result):
|
||||||
|
# populate servers list here
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_banner(self, result):
|
def on_banner(self, result):
|
||||||
|
@ -107,26 +128,6 @@ class Network(threading.Thread):
|
||||||
self.send(messages, channel)
|
self.send(messages, channel)
|
||||||
|
|
||||||
|
|
||||||
def auto_cycle(self):
|
|
||||||
if not self.is_connected and self.config.get('auto_cycle'):
|
|
||||||
print_msg("Using random server...")
|
|
||||||
servers = filter_protocol(DEFAULT_SERVERS, 's')
|
|
||||||
while servers:
|
|
||||||
server = random.choice( servers )
|
|
||||||
servers.remove(server)
|
|
||||||
print server
|
|
||||||
self.config.set_key('server', server, False)
|
|
||||||
self.init_with_server(self.config)
|
|
||||||
if self.is_connected: break
|
|
||||||
|
|
||||||
if not self.is_connected:
|
|
||||||
print 'no server available'
|
|
||||||
self.connect_event.set() # to finish start
|
|
||||||
self.server = 'ecdsa.org:50001:t'
|
|
||||||
self.proxy = None
|
|
||||||
return
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
Loading…
Add table
Reference in a new issue