From 072454288d22d1b2f4c16d36f76f53155f3dfee1 Mon Sep 17 00:00:00 2001
From: leberr <robin.leber@student.reutlingen-university.de>
Date: Tue, 30 Jan 2024 19:13:11 +0100
Subject: [PATCH] fixed leader election

---
 server.py | 36 +++++++++++++++++++++++++-----------
 1 file changed, 25 insertions(+), 11 deletions(-)

diff --git a/server.py b/server.py
index 7f20d57..5185f13 100644
--- a/server.py
+++ b/server.py
@@ -208,21 +208,33 @@ class Server():
                 self.clients.remove(client)
     
     def basic_lcr(self):
-        print('New leader election starts')
         print('++++++++++++++++++++++++++')
-        print('server list')
-        print(self.serverList)
+        print('New leader election starts')
+        print('sending first leader election message to neighbour')
+
+        neighbour = get_neighbour(form_ring(self.serverList), MY_IP, 'left')
+        neighbour_address = (neighbour, RING_PORT) 
+        first_message = {
+            "mid": self.uuid,
+            "isLeader ": False
+        }
+        self.participant = True
+        ring_socket.sendto(json.dumps(first_message).encode('utf-8'), neighbour_address)
+
         print('\nWaiting to receive election message...\n')
         data, address = ring_socket.recvfrom(1024)
         election_message = json.loads(data.decode())
-        neighbour = get_neighbour(form_ring(self.serverList), MY_IP, 'left')
+        print('There is a election message')
+        print(election_message)
 
-        if election_message['isLeader']:
+        if election_message.get('isLeader'):
+            print('1: leader info weitergeben')
             self.leader_uuid = election_message['mid']
             # forward received election message to left neighbour
             self.participant = False
             ring_socket.sendto(json.dumps(election_message), neighbour)
-        if election_message['mid'] < self.uuid and not self.participant:
+        if election_message.get('mid') < self.uuid and not self.participant:
+            print('2: mich vorschlagen')
             new_election_message = {
                 "mid": self.uuid,
                 "isLeader ": False
@@ -230,20 +242,22 @@ class Server():
             self.participant = True
             # send received election message to left neighbour
             ring_socket.sendto(json.dumps(new_election_message), neighbour)
-        elif election_message['mid'] > self.uuid:
+        elif election_message.get('mid') > self.uuid:
             # send received election message to left neighbour
+            print('3: Jemand anderes vorschlagen')
             self.participant = True
             ring_socket.sendto(json.dumps(election_message), neighbour)
-        elif election_message['mid'] == self.uuid:
+        elif election_message.get('mid') == self.uuid:
+            print('4: Ich wurde als Leader definiert')
             self.leader_uid = self.uuid
             self.isLeader = True
             new_election_message = {
                 "mid": self.uuid,
                 "isLeader ": True
             }
-            # send new election message to left neighbour
-            self.participant = False
-            ring_socket.sendto(json.dumps(new_election_message), neighbour)
+        # send new election message to left neighbour
+        self.participant = False
+        ring_socket.sendto(json.dumps(new_election_message).encode('utf-8'), neighbour_address)
 
 
 # starting all simultaneously working procedures
-- 
GitLab