From 7518ca2210dd703c03731f7817f7c99cdfdd5b19 Mon Sep 17 00:00:00 2001 From: Katharina <katharina.willig@outlook.com> Date: Sat, 23 Nov 2024 16:21:39 +0100 Subject: [PATCH] test multiple servers --- __pycache__/kserver.cpython-313.pyc | Bin 0 -> 3481 bytes extract.py | 4 +++ form_ring.py | 47 ++++++++++++++++++++++++++++ kserver.py | 33 +++++++++++++++++-- sync.py | 15 --------- 5 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 __pycache__/kserver.cpython-313.pyc create mode 100644 extract.py create mode 100644 form_ring.py delete mode 100644 sync.py diff --git a/__pycache__/kserver.cpython-313.pyc b/__pycache__/kserver.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..401d92341d7bb4d3c2994fd3d5d394df9ea34069 GIT binary patch literal 3481 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 NnGc!_EK=a`0{|=E^eO-V literal 0 HcmV?d00001 diff --git a/extract.py b/extract.py new file mode 100644 index 0000000..926a83b --- /dev/null +++ b/extract.py @@ -0,0 +1,4 @@ + + # checks wheter the message comes from the server itself + if decoded_message.startswith(f"[{server_id}]"): + continue # if...ignores it \ No newline at end of file diff --git a/form_ring.py b/form_ring.py new file mode 100644 index 0000000..c89f340 --- /dev/null +++ b/form_ring.py @@ -0,0 +1,47 @@ +import socket +import kserver + +my_list = kserver.server_uuids +print(my_list) +result = ", ".join([str(x) for x in my_list]) # Listen-Komprehension +# Alternativ: result = ", ".join(map(str, my_list)) +print(result) # Ausgabe: 1, 2, 3 + + +def form_ring(result): + #uuid, address = kserver.server_socket.recvfrom(4096) + #print("here uuid or what:", uuid, "and address:", address) + #message = uuid.decode() + #Convert a 32-bit packed IPv4 address to its standard dotted-quad string representation + #sorted()=returns a sorted list of the specified iterable object + sorted_binary_ring= sorted([socket.inet_aton(member) for member in result]) + sorted_ip_ring= [socket.inet_ntoa(node) for node in sorted_binary_ring] + return sorted_ip_ring + +#dynamic! +#1.broadcast server uuid everyone +#listen to broadcast here and +#members = ['192.168.0.1', '130.234.204.2', '130.234.203.2', '130.234.204.1', '182.4.3.111'] +ring = form_ring(result) + +print(ring) + +#getting neighbour: +def get_neighbour(ring, current_node_ip, direction='left'): + current_node_index = ring.index(current_node_ip) if current_node_ip in ring else -1 + if current_node_index != -1: + if direction == 'left': + if current_node_index + 1 == len(ring): + return ring[0] + else: + return ring[current_node_index + 1] + else: + if current_node_index == 0: + return ring[len(ring) - 1] + else: + return ring[current_node_index- 1] + else: + return None + +neighbour = get_neighbour(ring, '130.234.203.2', 'left') +print(neighbour) \ No newline at end of file diff --git a/kserver.py b/kserver.py index b82846d..453d229 100644 --- a/kserver.py +++ b/kserver.py @@ -8,6 +8,9 @@ broadcast_port = 55555 # create unique server-ID server_id = str(uuid.uuid4()) +# Set to store UUIDs of other servers +server_uuids = set() + # create server-socket for broadcast server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) @@ -30,9 +33,19 @@ def listen(): message, client_address = server_socket.recvfrom(4096) decoded_message = message.decode() - # checks wheter the message comes from the server itself - if decoded_message.startswith(f"[{server_id}]"): - continue # if...ignores it + # Extract UUID from the message + if decoded_message.startswith("[") and "]" in decoded_message: + sender_uuid = decoded_message.split("]")[0][1:] + + # Ignore messages from self + if sender_uuid == server_id: + continue + + # Add the UUID to the set if it's not already known + if sender_uuid not in server_uuids: + server_uuids.add(sender_uuid) + print(f"Discovered new server UUID: {sender_uuid} and server set: {server_uuids}") + # print(server_uuids) #checks if the message containts the string "entered" if decoded_message.__contains__("entered"): @@ -60,3 +73,17 @@ if __name__ == "__main__": #print(listen_thread.is_alive()) #listen() + # Example of broadcasting your UUID periodically (optional) + def periodic_broadcast(): + import time + while True: + try: + broadcast("Server is running") + time.sleep(10) # Broadcast every 5 seconds + except KeyboardInterrupt: + break + + broadcast_thread = threading.Thread(target=periodic_broadcast) + broadcast_thread.daemon = True # Stop when main thread stops + broadcast_thread.start() + diff --git a/sync.py b/sync.py deleted file mode 100644 index c3b6d25..0000000 --- a/sync.py +++ /dev/null @@ -1,15 +0,0 @@ -import leaderServer - - -def check_arrays(received_server_network, received_leader): - - #aktuellen zustand des servers prüfen: - if received_server_network != leaderServer.server_network: - print("Unterschiede im Server-Netzwerk gefunden. Aktualisiere das Netzwerk...") - leaderServer.server_network = received_server_network # Update das Netzwerk - print(f"new network: {received_server_network} or {leaderServer.server_network}") - - if received_leader != leaderServer.leader: - print("Unterschiede im Leader gefunden. Aktualisiere den Leader...") - leaderServer.leader = received_leader # Update den Leader - print(f"new network: {received_leader} or {leaderServer.leader}") \ No newline at end of file -- GitLab