Skip to content
Snippets Groups Projects
Commit 41501ddb authored by Alexander Schulz's avatar Alexander Schulz
Browse files

group chat message

parent f7499637
No related branches found
No related tags found
No related merge requests found
...@@ -80,15 +80,29 @@ class Client(multiprocessing.Process): ...@@ -80,15 +80,29 @@ class Client(multiprocessing.Process):
client_socket.sendall(bytes(message, 'utf-8')) client_socket.sendall(bytes(message, 'utf-8'))
data = client_socket.recv(1024) #data = client_socket.recv(1024)
print(f"Received response from server: {data.decode('utf-8')}") #print(f"Received response from server: {data.decode('utf-8')}")
client_socket.close() client_socket.close()
def receive_messages(self): def receive_messages(self):
print("Listening for groupchat multicast messages")
client_receive_message_multicast_port PORT = 51000
client_receive_message_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_receive_message_socket.bind((self.client_address, PORT))
client_receive_message_socket.listen()
print("Listening for groupchat messages")
while True:
connection, addr = client_receive_message_socket.accept()
#print(addr)
#print(f"Connection established with {addr}")
message = connection.recv(1024)
print(f"GC message: {message.decode('utf-8')}")
#multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) #multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
#multicast_socket.bind(('0.0.0.0', client_receive_message_multicast_port)) #multicast_socket.bind(('0.0.0.0', client_receive_message_multicast_port))
......
...@@ -493,13 +493,12 @@ class Server(multiprocessing.Process): ...@@ -493,13 +493,12 @@ class Server(multiprocessing.Process):
message = connection.recv(1024) message = connection.recv(1024)
print(f"Received message from client: {message.decode('utf-8')}") print(f"Received message from client: {message.decode('utf-8')}")
response = "Hello, client! I received your message." #response = "Hello, client! I received your message."
connection.sendall(bytes(response, 'utf-8')) #connection.sendall(bytes(response, 'utf-8'))
connection.close() connection.close()
if message: if message:
self.distribute_chat_message(message, addr) self.distribute_chat_message(message, addr)
#print(addr[0])
def distribute_chat_message(self, message, addr): def distribute_chat_message(self, message, addr):
group = self.find_group_of_client(addr) group = self.find_group_of_client(addr)
...@@ -508,27 +507,25 @@ class Server(multiprocessing.Process): ...@@ -508,27 +507,25 @@ class Server(multiprocessing.Process):
for key in self.local_clients_cache: for key in self.local_clients_cache:
if group in key: if group in key:
receiver_list.append(self.local_clients_cache[key][0]) if addr[0] != self.local_clients_cache[key][0]:
print("Receiver list", receiver_list) receiver_list.append(self.local_clients_cache[key][0])
print("Receiver list", receiver_list)
distribute_chat_thread = threading.Thread(target=self.multicast_chat_message(message, receiver_list)) distribute_chat_thread = threading.Thread(target=self.send_chat_message_to_clients(message, receiver_list))
distribute_chat_thread.start() distribute_chat_thread.start()
def send_chat_message_to_clients(self, message, receiver_list):
#print(group) PORT = 51000
#print(message.decode('utf-8'))
def multicast_chat_message(self, message, receiver_list):
for client in receiver_list: for client in receiver_list:
multicast_address = (client, client_forward_message_multicast_port) try:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
multicast_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) server_socket.connect((client, PORT))
multicast_socket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 2) server_socket.sendall(message)
server_socket.close()
multicast_socket.sendto(message, multicast_address) except (ConnectionRefusedError, TimeoutError):
print("multicast message sent") print(f'Unable to send to {client}')
multicast_socket.close()
def start_leader_election(self): def start_leader_election(self):
#Reset last heartbeat timestamp #Reset last heartbeat timestamp
......
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