Make is_connected into a member function. No change in logic.
This commit is contained in:
parent
5e2e82d516
commit
9cf2eff16b
|
@ -37,10 +37,10 @@ def Interface(server, config = None):
|
||||||
exposed API is:
|
exposed API is:
|
||||||
|
|
||||||
- Inherits everything from threading.Thread.
|
- Inherits everything from threading.Thread.
|
||||||
- Member functions start(), send_request(), stop()
|
- Member functions start(), send_request(), stop(), is_connected()
|
||||||
- Member variables is_connected, server.
|
- Member variable server.
|
||||||
|
|
||||||
"is_connected" is currently racy. "server" is constant for the object's lifetime and hence
|
"is_connected()" is currently racy. "server" is constant for the object's lifetime and hence
|
||||||
synchronization is unnecessary.
|
synchronization is unnecessary.
|
||||||
"""
|
"""
|
||||||
host, port, protocol = server.split(':')
|
host, port, protocol = server.split(':')
|
||||||
|
@ -56,7 +56,7 @@ class TcpInterface(threading.Thread):
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self.config = config if config is not None else SimpleConfig()
|
self.config = config if config is not None else SimpleConfig()
|
||||||
self.lock = threading.Lock()
|
self.lock = threading.Lock()
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
self.debug = False # dump network messages. can be changed at runtime using the console
|
self.debug = False # dump network messages. can be changed at runtime using the console
|
||||||
self.message_id = 0
|
self.message_id = 0
|
||||||
self.unanswered_requests = {}
|
self.unanswered_requests = {}
|
||||||
|
@ -260,16 +260,19 @@ class TcpInterface(threading.Thread):
|
||||||
self.print_error("-->", r)
|
self.print_error("-->", r)
|
||||||
except socket.error, e:
|
except socket.error, e:
|
||||||
self.print_error("socked error:", e)
|
self.print_error("socked error:", e)
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
return
|
return
|
||||||
self.unanswered_requests[self.message_id] = method, params, _id, queue
|
self.unanswered_requests[self.message_id] = method, params, _id, queue
|
||||||
self.message_id += 1
|
self.message_id += 1
|
||||||
|
|
||||||
|
def is_connected(self):
|
||||||
|
return self.connected
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
if self.is_connected and self.protocol in 'st' and self.s:
|
if self.connected and self.protocol in 'st' and self.s:
|
||||||
self.s.shutdown(socket.SHUT_RDWR)
|
self.s.shutdown(socket.SHUT_RDWR)
|
||||||
self.s.close()
|
self.s.close()
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
self.print_error("stopped")
|
self.print_error("stopped")
|
||||||
|
|
||||||
def start(self, response_queue):
|
def start(self, response_queue):
|
||||||
|
@ -281,23 +284,23 @@ class TcpInterface(threading.Thread):
|
||||||
if self.s:
|
if self.s:
|
||||||
self.pipe = util.SocketPipe(self.s)
|
self.pipe = util.SocketPipe(self.s)
|
||||||
self.s.settimeout(2)
|
self.s.settimeout(2)
|
||||||
self.is_connected = True
|
self.connected = True
|
||||||
self.print_error("connected")
|
self.print_error("connected")
|
||||||
|
|
||||||
self.change_status()
|
self.change_status()
|
||||||
if not self.is_connected:
|
if not self.connected:
|
||||||
return
|
return
|
||||||
|
|
||||||
# ping timer
|
# ping timer
|
||||||
ping_time = 0
|
ping_time = 0
|
||||||
# request timer
|
# request timer
|
||||||
request_time = False
|
request_time = False
|
||||||
while self.is_connected:
|
while self.connected:
|
||||||
# ping the server with server.version
|
# ping the server with server.version
|
||||||
if time.time() - ping_time > 60:
|
if time.time() - ping_time > 60:
|
||||||
if self.is_ping:
|
if self.is_ping:
|
||||||
self.print_error("ping timeout")
|
self.print_error("ping timeout")
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
self.send_request({'method':'server.version', 'params':[ELECTRUM_VERSION, PROTOCOL_VERSION]})
|
self.send_request({'method':'server.version', 'params':[ELECTRUM_VERSION, PROTOCOL_VERSION]})
|
||||||
|
@ -313,11 +316,11 @@ class TcpInterface(threading.Thread):
|
||||||
else:
|
else:
|
||||||
if time.time() - request_time > 10:
|
if time.time() - request_time > 10:
|
||||||
self.print_error("request timeout", len(self.unanswered_requests))
|
self.print_error("request timeout", len(self.unanswered_requests))
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
break
|
break
|
||||||
continue
|
continue
|
||||||
if response is None:
|
if response is None:
|
||||||
self.is_connected = False
|
self.connected = False
|
||||||
break
|
break
|
||||||
if request_time is not False:
|
if request_time is not False:
|
||||||
self.print_error("stopping timer")
|
self.print_error("stopping timer")
|
||||||
|
@ -326,16 +329,12 @@ class TcpInterface(threading.Thread):
|
||||||
|
|
||||||
self.change_status()
|
self.change_status()
|
||||||
|
|
||||||
|
|
||||||
def change_status(self):
|
def change_status(self):
|
||||||
# print_error( "change status", self.server, self.is_connected)
|
|
||||||
self.response_queue.put((self, None))
|
self.response_queue.put((self, None))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def check_cert(host, cert):
|
def check_cert(host, cert):
|
||||||
try:
|
try:
|
||||||
x = x509.X509()
|
x = x509.X509()
|
||||||
|
|
|
@ -206,7 +206,7 @@ class Network(util.DaemonThread):
|
||||||
self.notify('status')
|
self.notify('status')
|
||||||
|
|
||||||
def is_connected(self):
|
def is_connected(self):
|
||||||
return self.interface and self.interface.is_connected
|
return self.interface and self.interface.is_connected()
|
||||||
|
|
||||||
def send_subscriptions(self):
|
def send_subscriptions(self):
|
||||||
for addr in self.addresses:
|
for addr in self.addresses:
|
||||||
|
@ -322,7 +322,7 @@ class Network(util.DaemonThread):
|
||||||
return
|
return
|
||||||
|
|
||||||
if auto_connect:
|
if auto_connect:
|
||||||
if not self.interface.is_connected:
|
if not self.interface.is_connected():
|
||||||
self.switch_to_random_interface()
|
self.switch_to_random_interface()
|
||||||
else:
|
else:
|
||||||
if self.server_is_lagging():
|
if self.server_is_lagging():
|
||||||
|
@ -335,7 +335,7 @@ class Network(util.DaemonThread):
|
||||||
def switch_to_random_interface(self):
|
def switch_to_random_interface(self):
|
||||||
while self.interfaces:
|
while self.interfaces:
|
||||||
i = random.choice(self.interfaces.values())
|
i = random.choice(self.interfaces.values())
|
||||||
if i.is_connected:
|
if i.is_connected():
|
||||||
self.switch_to_interface(i)
|
self.switch_to_interface(i)
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
|
@ -356,14 +356,14 @@ class Network(util.DaemonThread):
|
||||||
|
|
||||||
|
|
||||||
def set_server(self, server):
|
def set_server(self, server):
|
||||||
if self.default_server == server and self.interface.is_connected:
|
if self.default_server == server and self.interface.is_connected():
|
||||||
return
|
return
|
||||||
|
|
||||||
if self.protocol != deserialize_server(server)[2]:
|
if self.protocol != deserialize_server(server)[2]:
|
||||||
return
|
return
|
||||||
|
|
||||||
# stop the interface in order to terminate subscriptions
|
# stop the interface in order to terminate subscriptions
|
||||||
if self.interface.is_connected:
|
if self.interface.is_connected():
|
||||||
self.stop_interface()
|
self.stop_interface()
|
||||||
|
|
||||||
# notify gui
|
# notify gui
|
||||||
|
@ -474,7 +474,7 @@ class Network(util.DaemonThread):
|
||||||
self.print_error('network: retrying connections')
|
self.print_error('network: retrying connections')
|
||||||
self.disconnected_servers = set([])
|
self.disconnected_servers = set([])
|
||||||
nodes_retry_time = now
|
nodes_retry_time = now
|
||||||
if not self.interface.is_connected:
|
if not self.interface.is_connected():
|
||||||
if self.config.get('auto_cycle'):
|
if self.config.get('auto_cycle'):
|
||||||
if self.interfaces:
|
if self.interfaces:
|
||||||
self.switch_to_random_interface()
|
self.switch_to_random_interface()
|
||||||
|
@ -500,7 +500,7 @@ class Network(util.DaemonThread):
|
||||||
if i.server in self.pending_servers:
|
if i.server in self.pending_servers:
|
||||||
self.pending_servers.remove(i.server)
|
self.pending_servers.remove(i.server)
|
||||||
|
|
||||||
if i.is_connected:
|
if i.is_connected():
|
||||||
self.add_interface(i)
|
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':[]})
|
||||||
|
|
|
@ -10,7 +10,7 @@ def get_peers():
|
||||||
q = Queue.Queue()
|
q = Queue.Queue()
|
||||||
interface.start(q)
|
interface.start(q)
|
||||||
i, r = q.get()
|
i, r = q.get()
|
||||||
if not interface.is_connected:
|
if not interface.is_connected():
|
||||||
raise BaseException("not connected")
|
raise BaseException("not connected")
|
||||||
# 2. get list of peers
|
# 2. get list of peers
|
||||||
interface.send_request({'id':0, 'method':'server.peers.subscribe','params':[]})
|
interface.send_request({'id':0, 'method':'server.peers.subscribe','params':[]})
|
||||||
|
@ -41,7 +41,7 @@ def send_request(peers, request):
|
||||||
continue
|
continue
|
||||||
if i.server in peers:
|
if i.server in peers:
|
||||||
peers.remove(i.server)
|
peers.remove(i.server)
|
||||||
if i.is_connected:
|
if i.is_connected():
|
||||||
reached_servers.append(i)
|
reached_servers.append(i)
|
||||||
else:
|
else:
|
||||||
print "Connection failed:", i.server
|
print "Connection failed:", i.server
|
||||||
|
|
Loading…
Reference in New Issue