53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
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()
|
|
|