@ -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 )