from Crypto.PublicKey.ECC import EccKey from classes.Message import Message from classes.MessageHandler import MessageHandler from classes.SantasBrain import Brain from classes.UserInterface import UserInterface participants: list[tuple[MessageHandler, UserInterface]] = [] class TestMessageHandler(MessageHandler): def __init__(self): super().__init__() def send_message(self, message: Message, signing_key: EccKey): message_string = message.generate_and_sign(signing_key) for message_handler, _ in participants: if message_handler != self: message_handler.decode_received_message(message_string) class TestUserInterface(UserInterface): def __init__(self, own_name, extra_info): super().__init__() self.received_names = [] self.own_name = own_name self.extra_info = extra_info def tell(self): self.set_user_info(self.own_name, self.extra_info) def lets_go(self): self.start_exchange(self.received_names) def receive_user(self, name: str): self.received_names.append(name) def announce_recipient(self, name: str, other_info: str): print(f'{self.own_name}: Received {name}, {other_info}') number_of_participants = 20 for i in range(number_of_participants): test_message_handler = TestMessageHandler() test_user_interface = TestUserInterface(f'User {i}', f'Lives at {i} street') brain = Brain(test_message_handler, test_user_interface) participants.append((test_message_handler, test_user_interface)) test_user_interface.tell() for i in range(number_of_participants): handler, interface = participants[i] interface.lets_go()