From 580fd757b436b47989ad9202f14930251c25e528 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Sun, 29 Jan 2023 20:55:40 +0100 Subject: [PATCH] Added destination_router_id parameter overrides to receive() virtuaL functions --- include/etl/message_broker.h | 8 +- include/etl/message_bus.h | 158 +++++++++++++++++------------------ 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/include/etl/message_broker.h b/include/etl/message_broker.h index 08a0d0b6..ad99cb3f 100644 --- a/include/etl/message_broker.h +++ b/include/etl/message_broker.h @@ -195,7 +195,7 @@ namespace etl //******************************************* virtual void receive(etl::message_router_id_t destination_router_id, - const etl::imessage& msg) ETL_OVERRIDE + const etl::imessage& msg) ETL_OVERRIDE { const etl::message_id_t id = msg.get_message_id(); @@ -217,7 +217,7 @@ namespace etl if (destination_router_id == etl::imessage_router::ALL_MESSAGE_ROUTERS || destination_router_id == router->get_message_router_id()) { - sub->get_router()->receive(msg); + router->receive(msg); } } @@ -236,7 +236,7 @@ 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_OVERRIDE { const etl::message_id_t id = shared_msg.get_message().get_message_id(); @@ -258,7 +258,7 @@ namespace etl if (destination_router_id == etl::imessage_router::ALL_MESSAGE_ROUTERS || destination_router_id == router->get_message_router_id()) { - sub->get_router()->receive(shared_msg); + router->receive(shared_msg); } } diff --git a/include/etl/message_bus.h b/include/etl/message_bus.h index 64b7958b..3ab24dba 100644 --- a/include/etl/message_bus.h +++ b/include/etl/message_bus.h @@ -155,85 +155,6 @@ namespace etl receive(etl::imessage_router::ALL_MESSAGE_ROUTERS, shared_msg); } - //******************************************** - virtual void receive(etl::message_router_id_t destination_router_id, - etl::shared_message shared_msg) ETL_OVERRIDE - { - switch (destination_router_id) - { - //***************************** - // Broadcast to all routers. - case etl::imessage_router::ALL_MESSAGE_ROUTERS: - { - router_list_t::iterator irouter = router_list.begin(); - - // Broadcast to everyone. - while (irouter != router_list.end()) - { - etl::imessage_router& router = **irouter; - - if (router.accepts(shared_msg.get_message().get_message_id())) - { - router.receive(shared_msg); - } - - ++irouter; - } - - break; - } - - //***************************** - // Must be an addressed message. - default: - { - // Find routers with the id. - ETL_OR_STD::pair range = etl::equal_range(router_list.begin(), - router_list.end(), - destination_router_id, - compare_router_id()); - - // Call all of them. - while (range.first != range.second) - { - if ((*(range.first))->accepts(shared_msg.get_message().get_message_id())) - { - (*(range.first))->receive(shared_msg); - } - - ++range.first; - } - - // Do any message buses. - // These are always at the end of the list. - router_list_t::iterator irouter = etl::lower_bound(router_list.begin(), - router_list.end(), - etl::imessage_bus::MESSAGE_BUS, - compare_router_id()); - - while (irouter != router_list.end()) - { - // So pass it on. - (*irouter)->receive(destination_router_id, shared_msg); - - ++irouter; - } - - break; - } - } - - if (has_successor()) - { - etl::imessage_router& successor = get_successor(); - - if (successor.accepts(shared_msg.get_message().get_message_id())) - { - successor.receive(destination_router_id, shared_msg); - } - } - } - //******************************************* virtual void receive(etl::message_router_id_t destination_router_id, const etl::imessage& message) ETL_OVERRIDE @@ -315,6 +236,85 @@ namespace etl } } + //******************************************** + virtual void receive(etl::message_router_id_t destination_router_id, + etl::shared_message shared_msg) ETL_OVERRIDE + { + switch (destination_router_id) + { + //***************************** + // Broadcast to all routers. + case etl::imessage_router::ALL_MESSAGE_ROUTERS: + { + router_list_t::iterator irouter = router_list.begin(); + + // Broadcast to everyone. + while (irouter != router_list.end()) + { + etl::imessage_router& router = **irouter; + + if (router.accepts(shared_msg.get_message().get_message_id())) + { + router.receive(shared_msg); + } + + ++irouter; + } + + break; + } + + //***************************** + // Must be an addressed message. + default: + { + // Find routers with the id. + ETL_OR_STD::pair range = etl::equal_range(router_list.begin(), + router_list.end(), + destination_router_id, + compare_router_id()); + + // Call all of them. + while (range.first != range.second) + { + if ((*(range.first))->accepts(shared_msg.get_message().get_message_id())) + { + (*(range.first))->receive(shared_msg); + } + + ++range.first; + } + + // Do any message buses. + // These are always at the end of the list. + router_list_t::iterator irouter = etl::lower_bound(router_list.begin(), + router_list.end(), + etl::imessage_bus::MESSAGE_BUS, + compare_router_id()); + + while (irouter != router_list.end()) + { + // So pass it on. + (*irouter)->receive(destination_router_id, shared_msg); + + ++irouter; + } + + break; + } + } + + if (has_successor()) + { + etl::imessage_router& successor = get_successor(); + + if (successor.accepts(shared_msg.get_message().get_message_id())) + { + successor.receive(destination_router_id, shared_msg); + } + } + } + using imessage_router::accepts; //*******************************************