diff --git a/__pycache__/kserver.cpython-313.pyc b/__pycache__/kserver.cpython-313.pyc new file mode 100644 index 0000000000000000000000000000000000000000..401d92341d7bb4d3c2994fd3d5d394df9ea34069 Binary files /dev/null and b/__pycache__/kserver.cpython-313.pyc differ diff --git a/extract.py b/extract.py new file mode 100644 index 0000000000000000000000000000000000000000..926a83b8490a81824c55d8a1a8651d2494db7939 --- /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 0000000000000000000000000000000000000000..c89f34077260faa9a44c00ef4c0f3a6c73df3396 --- /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 b82846d8163d56b875c7c270864454652d0b5478..453d229d85ccf671120f836e15ba78637515d2a9 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 c3b6d25a109362ba0590f80b0010af6bfab8228b..0000000000000000000000000000000000000000 --- 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