Skip to content
Snippets Groups Projects
Commit 4cf3ab3c authored by Michelle Fahrner's avatar Michelle Fahrner
Browse files

Upload New File

parent 89614207
No related branches found
No related tags found
Loading
#Test Communication UDP between 2
import socket
from uuid import uuid4
import uuid
ELECTION = 0
NEW_LEAD = 1
my_ip = '127.0.0.1'
election_socket = 12345
myuuid = uuid.uuid4() #UUid auch als String vergleichbar?
participating = False
is_leader = False
Leader = False
print(myuuid)
#Nachbar des Servers im Ring wird ermittelt - an diesen wird später die Election Message gesendet Achtung wieso ist beim letzenm der partner nicht der erste??
def get_neighbour(members, current_member_ip, direction='left'):
current_member_index = members.index(current_member_ip) if current_member_ip in members else -1
if current_member_index != -1:
if direction == 'left':
if current_member_index + 1 == len(members):
return members[0]
else:
return members[current_member_index + 1]
else:
if current_member_index - 1 < 0:
return members[len(members) - 1]
else:
return members[current_member_index - 1]
else:
return None
members = ['127.0.0.1', '127.0.0.2', '127.0.0.5']
neighbour = get_neighbour(members, my_ip , 'right')
print(neighbour)
#Funktion muss aufgerufen werden!
def start_election():
print("{} is starting an election.".format(myuuid))
#Server nimmt an Election Teil
participating = True
#Nachricht wird an den Server neben an gesendet
msg = f"{ELECTION}: {myuuid}".encode('utf-8')
#Msg encoden? Variable setzen?
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
send_socket.sendto(msg,(neighbour,election_socket))
#data,addr=send_socket.recvfrom(4096)
#Was passiert wenn diese Nachricht nicht ankommt?
send_socket.close()
def accept(group,erhaltene_uuid):
if group == ELECTION:
#Abgleich der erhaltenen Uuid mit der eigenen uuid
if erhaltene_uuid > myuuid:
print("{} is forwarding without updates.".format(myuuid))
participating = True
msg = f"{ELECTION}: {erhaltene_uuid}".encode()
#Weitergabe der höheren uuid
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
send_socket.sendto(msg,(neighbour,election_socket))
#Was passiert wenn diese Nachricht nicht ankommt?
send_socket.close()
if erhaltene_uuid < myuuid:
print("{} is updating and forwarding.".format(myuuid))
participating = True
msg = f"{ELECTION}: {myuuid}".encode()
#Weitergabe der höheren uuid
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
send_socket.sendto(msg,(neighbour,election_socket))
#Was passiert wenn diese Nachricht nicht ankommt?
send_socket.close()
if erhaltene_uuid == myuuid:
print("{} starts acting as a leader!".format(myuuid))
participating = False
is_leader = True
leader = myuuid
msg = f"{NEW_LEAD}: {myuuid}".encode()
#Weitergabe der höheren uuid
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
send_socket.sendto(msg,(neighbour,election_socket))
#Was passiert wenn diese Nachricht nicht ankommt?
send_socket.close()
if group == NEW_LEAD:
if erhaltene_uuid == myuuid:
return
if erhaltene_uuid != myuuid:
print("{} acknowledged new leader.".format(myuuid))
leader = myuuid
msg = f"{NEW_LEAD}: {erhaltene_uuid}".encode()
#Weitergabe der höheren uuid
send_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
send_socket.sendto(msg,(neighbour,election_socket))
#Was passiert wenn diese Nachricht nicht ankommt?
send_socket.close()
#zuhören
start_election()
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock.bind((my_ip,election_socket))
while True:
data,addr=sock.recvfrom(4096)
übernahme = data.decode('utf-8')
#message = ("Hello i am server").encode('utf-8')
#Für Piggiback Acn nutzen?
#sock.sendto(message,addr)
grouprec = int(übernahme.split(": ")[0])
#print(übernahme)
#print((übernahme.split(": ")[1]))
erhaltene_uuid2 = uuid.UUID((übernahme.split(": ")[1]))
accept(grouprec,erhaltene_uuid2)
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