Skip to content
Snippets Groups Projects
Commit 7518ca22 authored by Katharina's avatar Katharina
Browse files

test multiple servers

parent e092cdee
No related branches found
No related tags found
No related merge requests found
File added
# 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
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
...@@ -8,6 +8,9 @@ broadcast_port = 55555 ...@@ -8,6 +8,9 @@ broadcast_port = 55555
# create unique server-ID # create unique server-ID
server_id = str(uuid.uuid4()) server_id = str(uuid.uuid4())
# Set to store UUIDs of other servers
server_uuids = set()
# create server-socket for broadcast # create server-socket for broadcast
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
...@@ -30,9 +33,19 @@ def listen(): ...@@ -30,9 +33,19 @@ def listen():
message, client_address = server_socket.recvfrom(4096) message, client_address = server_socket.recvfrom(4096)
decoded_message = message.decode() decoded_message = message.decode()
# checks wheter the message comes from the server itself # Extract UUID from the message
if decoded_message.startswith(f"[{server_id}]"): if decoded_message.startswith("[") and "]" in decoded_message:
continue # if...ignores it 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" #checks if the message containts the string "entered"
if decoded_message.__contains__("entered"): if decoded_message.__contains__("entered"):
...@@ -60,3 +73,17 @@ if __name__ == "__main__": ...@@ -60,3 +73,17 @@ if __name__ == "__main__":
#print(listen_thread.is_alive()) #print(listen_thread.is_alive())
#listen() #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()
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment