@ -4,9 +4,9 @@ import sys 
			
		
	
		
			
				
					from  datetime  import  datetime ,  timedelta  
			
		
	
		
			
				
					from  time  import  sleep  
			
		
	
		
			
				
					from  typing  import  List  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					import  sys  
			
		
	
		
			
				
					import  os  
			
		
	
		
			
				
					import  time  
			
		
	
		
			
				
					import  threading   # Import threading module  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# Add the proto directory to the Python path  
			
		
	
		
			
				
					proto_dir  =  os . path . join ( os . path . dirname ( __file__ ) ,  ' message_queue ' ,  ' proto ' )  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -37,9 +37,6 @@ from message_queue.proto.ConnectStatus_pb2 import ConnectStatus 
			
		
	
		
			
				
					from  video_streamer.gst_video_streamer  import  GstVideoStreamer  
			
		
	
		
			
				
					import  cv2  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					import  os  
			
		
	
		
			
				
					import  time   # Ensure time module is imported  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					config_manager  =  ConfigManager ( ' config.yaml ' )  
			
		
	
		
			
				
					rtsp_links  =  config_manager . configs [ ' rtsp_links ' ] . get ( )  
			
		
	
		
			
				
					debug  =  config_manager . configs [ ' debug ' ] . get ( )  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -65,33 +62,16 @@ class ConnectionTracker: 
			
		
	
		
			
				
					# Create an instance of ConnectionTracker  
			
		
	
		
			
				
					connection_tracker  =  ConnectionTracker ( )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					def  check_client_connection ( ) :  
			
		
	
		
			
				
					    if  not  connection_tracker . is_client_connected ( ) :  
			
		
	
		
			
				
					        print ( " Client disconnected. Searching for another client... " )  
			
		
	
		
			
				
					        cl_ip ,  _  =  start_discovery_service ( 12345 )  
			
		
	
		
			
				
					        ic ( cl_ip )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        # Reinitialize the Manager with the new client addressimport time  # Ensure time module is imported  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# Helper class to track client connection status  
			
		
	
		
			
				
					class  ConnectionTracker :  
			
		
	
		
			
				
					class  ConnectionThread ( threading . Thread ) :  
			
		
	
		
			
				
					    def  __init__ ( self ) :  
			
		
	
		
			
				
					        self . last_message_time  =  time . time ( )   # Use time.time() to get the current time  
			
		
	
		
			
				
					        self . timeout  =  15   # Timeout in seconds (adjust as needed)  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    def  update_last_message_time ( self ) :  
			
		
	
		
			
				
					        self . last_message_time  =  time . time ( )   # Update with the current time  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    def  is_client_connected ( self ) :  
			
		
	
		
			
				
					        return  ( time . time ( )  -  self . last_message_time )  <  self . timeout   # Use time.time()  
			
		
	
		
			
				
					        super ( ) . __init__ ( )  
			
		
	
		
			
				
					        self . running  =  True  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					# Create an instance of ConnectionTracker  
			
		
	
		
			
				
					connection_tracker  =  ConnectionTracker ( )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					def  check_client_connection ( ) :  
			
		
	
		
			
				
					    def  run ( self ) :  
			
		
	
		
			
				
					        while  self . running :  
			
		
	
		
			
				
					            if  not  connection_tracker . is_client_connected ( ) :  
			
		
	
		
			
				
					                print ( " Client disconnected. Searching for another client... " )  
			
		
	
		
			
				
					        cl_ip ,  _  =  start_discovery_service ( 12345 )  
			
		
	
		
			
				
					                cl_ip ,  _  =  self . start_discovery_service ( 12345 )  
			
		
	
		
			
				
					                print ( cl_ip )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                # Reinitialize the Manager with the new client address  
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -100,6 +80,23 @@ def check_client_connection(): 
			
		
	
		
			
				
					                manager . start ( manager_callback )   # Restart the Manager and re-register the callback  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					                connection_tracker . update_last_message_time ( )   # Reset the timer after reconnecting  
			
		
	
		
			
				
					            time . sleep ( 10 )   # Check every 10 seconds  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    def  start_discovery_service ( self ,  port ) :  
			
		
	
		
			
				
					        sock  =  socket . socket ( socket . AF_INET ,  socket . SOCK_DGRAM )  
			
		
	
		
			
				
					        sock . bind ( ( ' 0.0.0.0 ' ,  port ) )  
			
		
	
		
			
				
					        print ( f " Discovery service listening on port {port}... " )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        while  True :  
			
		
	
		
			
				
					            data ,  addr  =  sock . recvfrom ( 1024 )  
			
		
	
		
			
				
					            if  data . decode ( )  ==  " DISCOVER_SERVER " :  
			
		
	
		
			
				
					                print ( f " Received discovery request from {addr} " )  
			
		
	
		
			
				
					                sock . sendto ( b " SERVER_RESPONSE " ,  addr )  
			
		
	
		
			
				
					                break  
			
		
	
		
			
				
					        return  addr  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    def  stop ( self ) :  
			
		
	
		
			
				
					        self . running  =  False  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					if  __name__  ==  ' __main__ ' :  
			
		
	
		
			
				
					    QCoreApplication . setAttribute ( Qt . AA_EnableHighDpiScaling )  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -193,12 +190,13 @@ if __name__ == '__main__': 
			
		
	
		
			
				
					    core . newFrame . connect ( gotNewFrame )  
			
		
	
		
			
				
					    core . coordsUpdated . connect ( gotCoords )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    # Set up the QTimer to check client connection every 10 seconds  
			
		
	
		
			
				
					    timer  =  QTimer ( )  
			
		
	
		
			
				
					    timer . timeout . connect ( check_client_connection )  
			
		
	
		
			
				
					    timer . start ( 10000 )   # 10 seconds  
			
		
	
		
			
				
					    # Start the connection thread  
			
		
	
		
			
				
					    connection_thread  =  ConnectionThread ( )  
			
		
	
		
			
				
					    connection_thread . start ( )  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    try :  
			
		
	
		
			
				
					        app . exec_ ( )  
			
		
	
		
			
				
					    except  KeyboardInterrupt :  
			
		
	
		
			
				
					        connection_thread . stop ( )  
			
		
	
		
			
				
					        connection_thread . join ( )  
			
		
	
		
			
				
					        sys . exit ( 0 )