|
|
@ -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,41 +62,41 @@ 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) |
|
|
|
super().__init__() |
|
|
|
self.running = True |
|
|
|
|
|
|
|
def update_last_message_time(self): |
|
|
|
self.last_message_time = time.time() # Update with the current time |
|
|
|
def run(self): |
|
|
|
while self.running: |
|
|
|
if not connection_tracker.is_client_connected(): |
|
|
|
print("Client disconnected. Searching for another client...") |
|
|
|
cl_ip, _ = self.start_discovery_service(12345) |
|
|
|
print(cl_ip) |
|
|
|
|
|
|
|
def is_client_connected(self): |
|
|
|
return (time.time() - self.last_message_time) < self.timeout # Use time.time() |
|
|
|
# Reinitialize the Manager with the new client address |
|
|
|
global manager |
|
|
|
manager = Manager(f"tcp://{cl_ip}:5558", f"tcp://{cl_ip}:5557") |
|
|
|
manager.start(manager_callback) # Restart the Manager and re-register the callback |
|
|
|
|
|
|
|
# Create an instance of ConnectionTracker |
|
|
|
connection_tracker = ConnectionTracker() |
|
|
|
connection_tracker.update_last_message_time() # Reset the timer after reconnecting |
|
|
|
time.sleep(10) # Check every 10 seconds |
|
|
|
|
|
|
|
def check_client_connection(): |
|
|
|
if not connection_tracker.is_client_connected(): |
|
|
|
print("Client disconnected. Searching for another client...") |
|
|
|
cl_ip, _ = start_discovery_service(12345) |
|
|
|
print(cl_ip) |
|
|
|
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}...") |
|
|
|
|
|
|
|
# Reinitialize the Manager with the new client address |
|
|
|
global manager |
|
|
|
manager = Manager(f"tcp://{cl_ip}:5558", f"tcp://{cl_ip}:5557") |
|
|
|
manager.start(manager_callback) # Restart the Manager and re-register the callback |
|
|
|
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 |
|
|
|
|
|
|
|
connection_tracker.update_last_message_time() # Reset the timer after reconnecting |
|
|
|
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: |
|
|
|
sys.exit(0) |
|
|
|
connection_thread.stop() |
|
|
|
connection_thread.join() |
|
|
|
sys.exit(0) |