From 98ccb45410eb6a1ee760a7b0063ea5931f1c5093 Mon Sep 17 00:00:00 2001 From: PhilippThoelke Date: Fri, 12 Jul 2024 22:33:35 +0200 Subject: [PATCH] Implement StringAwait node --- src/goofi/nodes/misc/stringawait.py | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/goofi/nodes/misc/stringawait.py diff --git a/src/goofi/nodes/misc/stringawait.py b/src/goofi/nodes/misc/stringawait.py new file mode 100644 index 0000000..8b75783 --- /dev/null +++ b/src/goofi/nodes/misc/stringawait.py @@ -0,0 +1,33 @@ +from goofi.data import Data, DataType +from goofi.node import Node +from goofi.params import BoolParam + + +class StringAwait(Node): + def config_input_slots(): + return {"message": DataType.STRING, "trigger": DataType.ARRAY} + + def config_output_slots(): + return {"out": DataType.STRING} + + def config_params(): + return { + "string_await": { + "require_change": BoolParam(True, doc="Only output when the message changes, and we have an unconsumed trigger") + } + } + + def setup(self): + self.last_message = None + + def process(self, message: Data, trigger: Data): + if trigger is None or message is None: + return + + if self.params.string_await.require_change.value and self.last_message == message.data: + return + + self.input_slots["trigger"].clear() + + self.last_message = message.data + return {"out": (message.data, message.meta)}