@ -63,6 +63,7 @@ class TcpInterface(threading.Thread):
self . unanswered_requests = { }
self . unanswered_requests = { }
# are we waiting for a pong?
# are we waiting for a pong?
self . is_ping = False
self . is_ping = False
self . ping_time = 0
# parse server
# parse server
self . server = server
self . server = server
self . host , self . port , self . protocol = self . server . split ( ' : ' )
self . host , self . port , self . protocol = self . server . split ( ' : ' )
@ -276,6 +277,17 @@ class TcpInterface(threading.Thread):
self . connected = False
self . connected = False
self . print_error ( " stopped " )
self . print_error ( " stopped " )
def maybe_ping ( self ) :
# ping the server with server.version?
if time . time ( ) - self . ping_time > 60 :
if self . is_ping :
self . print_error ( " ping timeout " )
self . stop ( )
else :
self . send_request ( { ' method ' : ' server.version ' , ' params ' : [ ELECTRUM_VERSION , PROTOCOL_VERSION ] } )
self . is_ping = True
self . ping_time = time . time ( )
def run ( self ) :
def run ( self ) :
self . s = self . get_socket ( )
self . s = self . get_socket ( )
if self . s :
if self . s :
@ -288,21 +300,12 @@ class TcpInterface(threading.Thread):
if not self . connected :
if not self . connected :
return
return
# ping timer
ping_time = 0
# request timer
# request timer
request_time = False
request_time = False
while self . connected :
while self . connected :
# ping the server with server.version
self . maybe_ping ( )
if time . time ( ) - ping_time > 60 :
if not self . connected :
if self . is_ping :
break
self . print_error ( " ping timeout " )
self . connected = False
break
else :
self . send_request ( { ' method ' : ' server.version ' , ' params ' : [ ELECTRUM_VERSION , PROTOCOL_VERSION ] } )
self . is_ping = True
ping_time = time . time ( )
try :
try :
response = self . pipe . get ( )
response = self . pipe . get ( )
except util . timeout :
except util . timeout :