Newer
Older
from dataclasses import dataclass
from Transaction import Transaction
from typing import TYPE_CHECKING
from uuid import uuid4
if TYPE_CHECKING:
from TransactionDeliverer import TransactionDeliverer
@dataclass
class Message:
sender: str
receiver: str
def receive_action(self):
raise NotImplementedError("This is an abstract method that should never be called")
@dataclass
class TransactionMessage(Message):
transaction: Transaction
message_id: str = None
def receive_action(self, td: TransactionDeliverer):
td.process_transaction_message(self)
def __post_init__(self):
self.message_id = str(uuid4())
@dataclass
class ProposedPriorityMessage(Message):
transaction_ID: str
proposed_priority: int
message_id: str = None
def receive_action(self, td: TransactionDeliverer):
td.process_proposed_priority_message(self)
def __post_init__(self):
self.message_id = str(uuid4())
@dataclass
class AgreedPriorityMessage(Message):
transaction_ID: str