from typing import Optional, Callable from Crypto.PublicKey.ECC import EccKey from SantaExchange.Message import Message from SantaExchange.MessageHandler import MessageHandler from SantaExchange.SantasBrain import Brain from SantaExchange.UserInterface import UserInterface class ExchangeClient(MessageHandler, UserInterface): def __init__(self, send_message_function, receive_user_function, announce_recipient_function): MessageHandler.__init__(self) UserInterface.__init__(self) self.send_message_function = send_message_function self.receive_user_function = receive_user_function self.announce_recipient_function = announce_recipient_function self.brain = Brain(self, self) def send_message(self, message: Message, signing_key: EccKey): message_string = message.generate_and_sign(signing_key) self.send_message_function(message_string) def receive_user(self, name: str): self.receive_user_function(name) def announce_recipient(self, name: str, other_info: str): self.announce_recipient_function(name, other_info)