Signals and Slots
Signals and slots can help to clarify communication between agents
Code
from sfctools.datastructs.signalslot import Signal,Slot
from sfctools.datastructs.signalslot import SignalSlot
from sfctools import Agent
class Sender(Agent): # a dummy receiver
def __init__(self):
super().__init__()
self.message = None
class Receiver(Agent): # a dummy sender
def __init__(self):
super().__init__()
self.recording = None
# create two dummy agents
my_sender = Sender()
my_receiver = Receiver()
my_other_receiver = Receiver()
# create signals and slots
sender_signal = Signal("Message")
receiver_slot = Slot("Message")
sender_signal.connect_to([receiver_slot])
# link signals and slots to agents
my_sender.message = sender_signal
my_receiver.recording = receiver_slot
my_other_receiver.recording = receiver_slot
# emit signal
sender_signal.update("Urgent Message")
sender_signal.emit(verbose=True)
# read recording
print("received:", my_receiver.recording.value())
print("received (other):", my_other_receiver.recording.value())
Output
Slot [Oo. SLOT Message] received [.oO SIGNAL Message]
received: Urgent Message
received (other): Urgent Message