Skip to content
Snippets Groups Projects
Commit 746fd19c authored by Michael Zanger's avatar Michael Zanger
Browse files

Merge branch 'michael' into 'main'

Heartbeat Functions

See merge request !1
parents 954d7820 2deb5d76
No related branches found
No related tags found
1 merge request!1Heartbeat Functions
......@@ -2,18 +2,19 @@ import multiprocessing
import socket
import threading
import json
import time
client_broadcast_listener_port = 49153
server_broadcast_listener_port = 49154
server_heartbeat_tcp_listener_port = 49155
client_receive_chat_tcp_port = 50001
client_forward_message_multicast_port = 51000
multicast_group_ip = '224.0.1.1'
class Server(multiprocessing.Process):
#server_address = '127.0.0.1'
host = socket.gethostname()
......@@ -39,13 +40,69 @@ class Server(multiprocessing.Process):
server_listener_thread = threading.Thread(target=self.listen_for_servers)
server_listener_thread.start()
heartbeat_send_thread = threading.Thread(target=self.send_heartbeat)
heartbeat_send_thread.start()
else:
cache_update_listener_thread = threading.Thread(target=self.listen_for_cache_update)
client_message_listener_thread = threading.Thread(target=self.listen_for_client_messages)
heartbeat_receive_thread = threading.Thread(target=self.listen_for_heartbeats)
cache_update_listener_thread.start()
client_message_listener_thread.start()
heartbeat_receive_thread.start()
def send_heartbeat(self):
while True:
time.sleep(10)
for server_id, server_port in self.local_servers_cache.items():
if server_id != self.server_id:
acknowledgment_received = self.send_heartbeat_to_server(self.server_address, server_heartbeat_tcp_listener_port)
#acknowledgment_received = "YES"
if acknowledgment_received:
print(f"Heartbeat acknowledgment received from {server_id}")
else:
print(f"No acknowledgment received from {server_id}. Server may be down.")
def send_heartbeat_to_server(self, server_address, server_port):
acknowledgment_received = False
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(2) # Timeout for the connection
# Combine server address and port into a tuple
server_address_with_port = (server_address, server_port)
print("server_address_with_port", server_address_with_port)
s.connect(server_address_with_port)
s.sendall(b'HEARTBEAT')
acknowledgment = s.recv(1024)
if acknowledgment == b'ACK':
acknowledgment_received = True
except socket.error:
pass # Error handling for connection errors or timeout
return acknowledgment_received
def listen_for_heartbeats(self):
while True:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((self.server_address, server_heartbeat_tcp_listener_port)) # Bind to any available port
actual_port = s.getsockname()[1]
print(f"Heartbeat Listener Started on port {actual_port}")
s.listen()
conn, addr = s.accept()
with conn:
print("Hallo")
data = conn.recv(1024)
if data == b'HEARTBEAT':
# Hier Code zum Verarbeiten des Heartbeats
# (z.B., Aktualisieren des Zeitstempels für den letzten Heartbeat)
print(f"Heartbeat received from {addr}")
# Hier Code zum Senden des Acknowledgment
conn.sendall(b'ACK')
except socket.error as e:
print(f"Error: {e}")
# find highest server ID in cache
def get_last_server_id(self):
......@@ -56,7 +113,6 @@ class Server(multiprocessing.Process):
# ascii value before A
return 64
def listen_for_servers(self):
BROADCAST_PORT = 49154
......
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