From 0e7155bb7bf2f78c243a8859b248039023a44fcb Mon Sep 17 00:00:00 2001 From: Artem30801 Date: Thu, 21 Mar 2019 15:11:54 +0300 Subject: [PATCH] Fixes #11 Added network listener for another servers on network --- Server/server_qt.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/Server/server_qt.py b/Server/server_qt.py index 599e5bc..5510c1d 100644 --- a/Server/server_qt.py +++ b/Server/server_qt.py @@ -18,6 +18,7 @@ import time import json import struct import socket +import random import threading import collections import configparser @@ -49,14 +50,39 @@ def auto_connect(): def ip_broadcast(server_ip, server_port): - msg = bytes(Client.form_message("server_ip ", {"host": server_ip, "port": str(server_port)}), "UTF-8") + msg = bytes(Client.form_message( + "server_ip", {"host": server_ip, "port": str(server_port), "id": SERVER_TID} + ), "UTF-8") broadcast_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) broadcast_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) broadcast_sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) while True: + time.sleep(10) broadcast_sock.sendto(msg, ('255.255.255.255', broadcast_port)) print("Broadcast sent") - time.sleep(10) + + +def broadcast_listener(): + broadcast_client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + broadcast_client.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + try: + broadcast_client.bind(("", broadcast_port)) + except OSError: + print("Another server is running on this computer, shutting down!") + #error_dialog = QtWidgets.QErrorMessage() + #error_dialog.showMessage('Another server detected on this computer, shutting down!') + sys.exit() + + while True: + data, addr = broadcast_client.recvfrom(1024) + command, args = Client.parse_message(data.decode("UTF-8")) + if command == "server_ip": + if args["id"] != SERVER_TID: + print("Another server detected on network, shutting down") + #error_dialog = QtWidgets.QErrorMessage() + #error_dialog.showMessage('Another server detected on network, shutting down!') + #return + sys.exit() NTP_DELTA = 2208988800 # 1970-01-01 00:00:00 @@ -368,6 +394,9 @@ USE_NTP = bool(config['NTP']['use_ntp']) NTP_HOST = config['NTP']['host'] NTP_PORT = int(config['NTP']['port']) +random.seed() +SERVER_TID = str(random.randint(0, 9999)).zfill(4) + ServerSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ServerSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) host = socket.gethostname() @@ -397,4 +426,8 @@ if __name__ == "__main__": broadcast_thread.daemon = True broadcast_thread.start() + listener_thread = threading.Thread(target=broadcast_listener) + listener_thread.daemon = True + listener_thread.start() + sys.exit(app.exec_())