diff --git a/include/etl/generators/message_router_generator.h b/include/etl/generators/message_router_generator.h index 1bfe767a..614be12a 100644 --- a/include/etl/generators/message_router_generator.h +++ b/include/etl/generators/message_router_generator.h @@ -128,6 +128,14 @@ namespace etl virtual bool is_producer() const = 0; virtual bool is_consumer() const = 0; + virtual void receive(const etl::imessage& message, etl::message_router_id_t source_router_id) + { + if (source_router_id != get_message_router_id()) + { + receive(message); + } + } + //******************************************** virtual void receive(etl::message_router_id_t destination_router_id, const etl::imessage& message) { @@ -137,6 +145,16 @@ namespace etl } } + //******************************************** + virtual void receive(etl::message_router_id_t destination_router_id, const etl::imessage& message, etl::message_router_id_t source_router_id) + { + if (((destination_router_id == get_message_router_id()) && (source_router_id != get_message_router_id())) || + (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS)) + { + receive(message); + } + } + //******************************************** virtual void receive(etl::shared_message shared_msg) { @@ -152,6 +170,16 @@ namespace etl } } + //******************************************** + virtual void receive(etl::message_router_id_t destination_router_id, etl::shared_message shared_msg, etl::message_router_id_t source_router_id) + { + if (((destination_router_id == get_message_router_id()) && (source_router_id != get_message_router_id())) || + (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS)) + { + receive(shared_msg); + } + } + //******************************************** bool accepts(const etl::imessage& msg) const { diff --git a/include/etl/message_bus.h b/include/etl/message_bus.h index 3ab24dba..58e64309 100644 --- a/include/etl/message_bus.h +++ b/include/etl/message_bus.h @@ -150,14 +150,32 @@ namespace etl } //******************************************* - virtual void receive(etl::shared_message shared_msg) ETL_OVERRIDE + virtual void receive(etl::shared_message shared_msg) ETL_OVERRIDE { receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, shared_msg); } + virtual void receive(const etl::imessage& message, + etl::message_router_id_t source_router_id) + { + receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, + message, + source_router_id); + } + + //******************************************* + virtual void receive(etl::shared_message shared_msg, + etl::message_router_id_t source_router_id) ETL_OVERRIDE + { + receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, + shared_msg, + source_router_id); + } + //******************************************* virtual void receive(etl::message_router_id_t destination_router_id, - const etl::imessage& message) ETL_OVERRIDE + const etl::imessage& message, + etl::message_router_id_t source_router_id) ETL_OVERRIDE { switch (destination_router_id) { @@ -238,7 +256,8 @@ namespace etl //******************************************** virtual void receive(etl::message_router_id_t destination_router_id, - etl::shared_message shared_msg) ETL_OVERRIDE + etl::shared_message shared_msg, + etl::message_router_id_t source_router_id) ETL_OVERRIDE { switch (destination_router_id) { diff --git a/include/etl/message_router.h b/include/etl/message_router.h index e5f9e12c..65bfc812 100644 --- a/include/etl/message_router.h +++ b/include/etl/message_router.h @@ -116,6 +116,14 @@ namespace etl virtual bool is_producer() const = 0; virtual bool is_consumer() const = 0; + virtual void receive(const etl::imessage& message, etl::message_router_id_t source_router_id) + { + if (source_router_id != get_message_router_id()) + { + receive(message); + } + } + //******************************************** virtual void receive(etl::message_router_id_t destination_router_id, const etl::imessage& message) { @@ -125,6 +133,16 @@ namespace etl } } + //******************************************** + virtual void receive(etl::message_router_id_t destination_router_id, const etl::imessage& message, etl::message_router_id_t source_router_id) + { + if (((destination_router_id == get_message_router_id()) && (source_router_id != get_message_router_id())) || + (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS)) + { + receive(message); + } + } + //******************************************** virtual void receive(etl::shared_message shared_msg) { @@ -140,6 +158,25 @@ namespace etl } } + //******************************************** + virtual void receive(etl::shared_message shared_msg, etl::message_router_id_t source_router_id) + { + if (source_router_id != get_message_router_id()) + { + receive(shared_msg); + } + } + + //******************************************** + virtual void receive(etl::message_router_id_t destination_router_id, etl::shared_message shared_msg, etl::message_router_id_t source_router_id) + { + if (((destination_router_id == get_message_router_id()) && (source_router_id != get_message_router_id())) || + (destination_router_id == imessage_router::ALL_MESSAGE_ROUTERS)) + { + receive(shared_msg); + } + } + //******************************************** bool accepts(const etl::imessage& msg) const {