Browse Source

removed qtimer and added connection_thread

client-connection
s_kiani 2 months ago
parent
commit
7324e6d278
  1. 62
      app.py

62
app.py

@ -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)
Loading…
Cancel
Save