@ -60,6 +60,7 @@ class TcpInterface(threading.Thread):
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 . response_queue = response_queue
self . response_queue = response_queue
self . request_queue = Queue . Queue ( )
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
@ -249,22 +250,26 @@ class TcpInterface(threading.Thread):
return s
return s
def send_request ( self , request , response_queue = None ) :
def send_request ( self , request , queue = None ) :
''' Queue a request. Blocking only if called from other threads. '''
_id = request . get ( ' id ' )
self . request_queue . put ( ( request , response_queue ) , threading . current_thread ( ) != self )
method = request . get ( ' method ' )
params = request . get ( ' params ' )
def send_requests ( self ) :
with self . lock :
''' Sends all queued requests '''
while self . is_connected ( ) and not self . request_queue . empty ( ) :
request , response_queue = self . request_queue . get ( )
method = request . get ( ' method ' )
params = request . get ( ' params ' )
r = { ' id ' : self . message_id , ' method ' : method , ' params ' : params }
try :
try :
r = { ' id ' : self . message_id , ' method ' : method , ' params ' : params }
self . pipe . send ( r )
self . pipe . send ( r )
if self . debug :
self . print_error ( " --> " , r )
except socket . error , e :
except socket . error , e :
self . print_error ( " socked error: " , e )
self . print_error ( " socket error: " , e )
self . connected = False
self . connected = False
return
return
self . unanswered_requests [ self . message_id ] = method , params , _id , queue
if self . debug :
self . print_error ( " --> " , r )
self . unanswered_requests [ self . message_id ] = method , params , request . get ( ' id ' ) , response_queue
self . message_id + = 1
self . message_id + = 1
def is_connected ( self ) :
def is_connected ( self ) :
@ -304,6 +309,7 @@ class TcpInterface(threading.Thread):
request_time = False
request_time = False
while self . connected :
while self . connected :
self . maybe_ping ( )
self . maybe_ping ( )
self . send_requests ( )
if not self . connected :
if not self . connected :
break
break
try :
try :