Loading poolpay/director/Director.py +37 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,10 @@ from time import monotonic, sleep from poolpay import db from poolpay.display.Display import Display from poolpay.model.Card import Card from poolpay.model.MessageReceipt import MessageReceipt from poolpay.model.messages.Message import Message from poolpay.model.messages.UpdateBalanceMessage import UpdateBalanceMessage from poolpay.model.Person import Person from poolpay.price.constants import DRINK from poolpay.ui.Play import Play from poolpay.ui.scenes.Scene import Scene Loading Loading @@ -172,3 +176,36 @@ class Director: person_name=card.owner.name, ).present() logging.debug("Presented Balance scene") def message_received(self, message: Message) -> None: if (receipt := MessageReceipt.get_only(message.uuid)) and receipt.successful: logging.info( f"Successfully previously received message {message.uuid}, doing nothing." ) return successful = False try: successful = self._handle_message(message) finally: db.session.add(MessageReceipt(uuid=message.uuid, successful=successful)) db.session.commit() def _handle_message(self, message: Message) -> bool: """ Act upon the given message, and return if that was successful. """ match message: case UpdateBalanceMessage(_, by_amount_cents, person_full_name): person = Person.get_by_full_name(person_full_name) if not person: # Could not reliably guess a person given the full name return False person.deposit(by_amount_cents) return True case _: logging.info(f"Did not handle unknown message of f{type(message)}") return False Loading
poolpay/director/Director.py +37 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,10 @@ from time import monotonic, sleep from poolpay import db from poolpay.display.Display import Display from poolpay.model.Card import Card from poolpay.model.MessageReceipt import MessageReceipt from poolpay.model.messages.Message import Message from poolpay.model.messages.UpdateBalanceMessage import UpdateBalanceMessage from poolpay.model.Person import Person from poolpay.price.constants import DRINK from poolpay.ui.Play import Play from poolpay.ui.scenes.Scene import Scene Loading Loading @@ -172,3 +176,36 @@ class Director: person_name=card.owner.name, ).present() logging.debug("Presented Balance scene") def message_received(self, message: Message) -> None: if (receipt := MessageReceipt.get_only(message.uuid)) and receipt.successful: logging.info( f"Successfully previously received message {message.uuid}, doing nothing." ) return successful = False try: successful = self._handle_message(message) finally: db.session.add(MessageReceipt(uuid=message.uuid, successful=successful)) db.session.commit() def _handle_message(self, message: Message) -> bool: """ Act upon the given message, and return if that was successful. """ match message: case UpdateBalanceMessage(_, by_amount_cents, person_full_name): person = Person.get_by_full_name(person_full_name) if not person: # Could not reliably guess a person given the full name return False person.deposit(by_amount_cents) return True case _: logging.info(f"Did not handle unknown message of f{type(message)}") return False