DecentraSanta/WebServer/static/exchange_client.py
2025-04-20 18:08:07 +02:00

71 lines
1.8 KiB
Python

import logging
from logging.config import dictConfig
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
logging_function: Optional[Callable[[str], None]] = None
class ExchangeLogger(logging.Handler):
def emit(self, record: logging.LogRecord):
if logging_function is not None:
logging_function(record.message)
LOGGING_SETTINGS = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'std_formatter': {'format': '%(message)s'}
},
'handlers': {
'stdhandler': {
'class': 'logging.StreamHandler',
'formatter': 'std_formatter',
'stream': 'ext://sys.stdout'
},
'ExchangeLogger': {
'class': f'{__name__}.ExchangeLogger',
'formatter': 'std_formatter',
'level': 'INFO'
}
},
'loggers': {
'root': {
'handlers': ['stdhandler', 'ExchangeLogger'],
'level': 'NOTSET',
'propagate': True
}
}
}
dictConfig(LOGGING_SETTINGS)
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)