diff --git a/server.py b/server.py index 5417ce183ac5381db361593a6867fb88d117139b..c1bc4775804f459cf0e9898ddf96dfae2ca44848 100644 --- a/server.py +++ b/server.py @@ -28,7 +28,7 @@ def broadcast(message): # Listener function def listen(queue, shared_data): """Receives messages and updates shared state.""" - print(f"Listener from {shared_data['server_id']} is listening on {server_socket}") + print(f"Listener from {shared_data['server_id']} is listening...") global active_servers while True: try: @@ -81,32 +81,46 @@ def start_election(queue, shared_data): while time.time() < timeout: try: - message = queue.get(timeout=1) + message = queue.get(timeout=1) #waits 1 sec for a message if "START_ELECTION" in message: sender_uuid = message.split(": ")[1] active_servers[sender_uuid] = time.time() print(f"Received UUID for election: {sender_uuid}") - if sender_uuid > highest_id: - highest_id = sender_uuid - print(f"Received higher ID {sender_uuid}, forwarding...") - broadcast(f"START_ELECTION: {sender_uuid}") +################dumblogic###onlyworkswith2servers################################ + if shared_data['server_id']==sender_uuid: + continue + else: + if sender_uuid > highest_id: + highest_id = sender_uuid + print(f"Received higher ID {sender_uuid}, forwarding...") + broadcast(f"START_ELECTION: {sender_uuid}") + + elif sender_uuid == highest_id: + shared_data['current_leader'] = sender_uuid + print(f"(sender) Leader elected: {shared_data['current_leader']}") + broadcast(f"LEADER: {shared_data['current_leader']}") + + else: + shared_data['current_leader'] = shared_data['server_id'] + print(f"(official, its me) Leader elected: {shared_data['current_leader']}") + broadcast(f"LEADER: {shared_data['current_leader']}") elif "LEADER" in message: leader_uuid = message.split(": ")[1] shared_data['current_leader'] = leader_uuid - print(f"Leader elected: {shared_data['current_leader']}") + print(f"(leader) Leader elected: {shared_data['current_leader']}") return except multiprocessing.queues.Empty: continue - if highest_id == shared_data['server_id']: - shared_data['current_leader'] = shared_data['server_id'] - broadcast(f"LEADER: {shared_data['current_leader']}") - print(f"I am the leader: {shared_data['current_leader']}") - else: - print(f"Leader election finished, leader is {highest_id}") + #if highest_id == shared_data['server_id']: + # shared_data['current_leader'] = shared_data['server_id'] + # broadcast(f"LEADER: {shared_data['current_leader']}") + # print(f"I am the leader: {shared_data['current_leader']}") + #else: + # print(f"Leader election finished, leader is {highest_id}") # Heartbeat function