diff options
| author | yangwei <[email protected]> | 2024-09-25 18:18:02 +0800 |
|---|---|---|
| committer | yangwei <[email protected]> | 2024-09-25 18:18:02 +0800 |
| commit | 74f77f34112170d081868203441e71b2c78a5452 (patch) | |
| tree | 7134993b9f9013d620777e03f8727648c79e404b /infra/module_manager | |
| parent | 7291db59693c271f582cc5428306d74a007cb4b9 (diff) | |
✨ feat(polling manager): support polling manager
Diffstat (limited to 'infra/module_manager')
| -rw-r--r-- | infra/module_manager/module_manager.c | 38 | ||||
| -rw-r--r-- | infra/module_manager/module_manager_interna.h | 1 | ||||
| -rw-r--r-- | infra/module_manager/test/gtest_module_manager_main.cpp | 55 |
3 files changed, 0 insertions, 94 deletions
diff --git a/infra/module_manager/module_manager.c b/infra/module_manager/module_manager.c index 38e2135..471564b 100644 --- a/infra/module_manager/module_manager.c +++ b/infra/module_manager/module_manager.c @@ -237,42 +237,4 @@ void stellar_module_set_name(struct stellar_module* mod, const char *name) memcpy(mod->name, name, MIN(NAME_MAX, strlen(name))); return; } -#define TOPIC_POLLING "POLLING" -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wcast-function-type" -static void stellar_module_manager_on_polling_dispatch(int topic_id __unused, - void *msg __unused, - on_msg_cb_func* on_msg_cb, - void *on_msg_cb_arg, - void *dispatch_arg) -{ - struct stellar_module_manager *mod_mgr=(struct stellar_module_manager *)dispatch_arg; - module_on_polling_func *polling = (module_on_polling_func *)on_msg_cb; - polling(mod_mgr, on_msg_cb_arg); -} - -int stellar_module_manager_polling_subscribe(struct stellar_module_manager* mod_mgr, module_on_polling_func on_polling, void *polling_arg) -{ - mod_mgr->schema.polling_topic_id=mq_schema_get_topic_id(mod_mgr->schema.mq_schema, TOPIC_POLLING); - if(mod_mgr->schema.polling_topic_id<0) - { - mod_mgr->schema.polling_topic_id=mq_schema_create_topic(mod_mgr->schema.mq_schema, TOPIC_POLLING, stellar_module_manager_on_polling_dispatch, mod_mgr, NULL, NULL); - } - return mq_schema_subscribe(mod_mgr->schema.mq_schema, mod_mgr->schema.polling_topic_id, (on_msg_cb_func *)on_polling, polling_arg); -} - -#pragma GCC diagnostic pop - -void stellar_module_manager_polling_active(struct stellar_module_manager *mod_mgr) -{ - mq_runtime_publish_message(local_mq_rt, mod_mgr->schema.polling_topic_id, NULL); -} - -void stellar_module_manager_polling_dispatch(struct stellar_module_manager *mod_mgr) -{ - stellar_module_manager_polling_active(mod_mgr); - mq_runtime_dispatch(local_mq_rt); - mq_runtime_clean(local_mq_rt); - return; -} diff --git a/infra/module_manager/module_manager_interna.h b/infra/module_manager/module_manager_interna.h index 5d571a6..7d28b50 100644 --- a/infra/module_manager/module_manager_interna.h +++ b/infra/module_manager/module_manager_interna.h @@ -40,7 +40,6 @@ struct stellar_module_manager int load_module_num; int max_thread_num; struct mq_schema *mq_schema; - int polling_topic_id; }schema; }__attribute__((aligned(sizeof(void*)))); diff --git a/infra/module_manager/test/gtest_module_manager_main.cpp b/infra/module_manager/test/gtest_module_manager_main.cpp index e46037b..74aa611 100644 --- a/infra/module_manager/test/gtest_module_manager_main.cpp +++ b/infra/module_manager/test/gtest_module_manager_main.cpp @@ -200,61 +200,6 @@ TEST(module_manager, basic_module) { } -/*********************************** - * TEST MODULE MANAGER POLLING API * - ***********************************/ - -struct test_module_polling_env -{ - int N_round; - int polling_count; - int polling_active_count; -}; - - void test_module_on_polling(struct stellar_module_manager* mod_mgr, void *polling_arg) - { - struct test_module_polling_env *env = (struct test_module_polling_env*)polling_arg; - env->polling_count++; - if(env->polling_count%2==0) - { - stellar_module_manager_polling_active(mod_mgr); - env->polling_active_count++; - } - } - -TEST(module_manager_polling, basic_polling_module) { - - struct mq_schema *mq_schema=mq_schema_new(); - - struct stellar_module_manager *mod_mgr=stellar_module_manager_new(NULL, 10, mq_schema); - EXPECT_TRUE(mod_mgr!=NULL); - - - EXPECT_EQ(stellar_module_manager_get_max_thread_num(mod_mgr), 10); - EXPECT_EQ(stellar_module_manager_get_mq_schema(mod_mgr), mq_schema); - - struct test_module_polling_env env={}; - env.N_round=10; - - stellar_module_manager_polling_subscribe(mod_mgr, test_module_on_polling, &env); - - struct mq_runtime *mq_rt = mq_runtime_new(mq_schema); - stellar_module_manager_register_thread(mod_mgr, 1, mq_rt); - - EXPECT_EQ((long)stellar_module_manager_get_thread_id(mod_mgr), 1); - EXPECT_EQ(stellar_module_manager_get_mq_runtime(mod_mgr), mq_rt); - - for(int i=0; i<env.N_round; i++) - { - stellar_module_manager_polling_dispatch(mod_mgr); - } - - stellar_module_manager_free(mod_mgr); - - EXPECT_EQ(env.polling_count, env.N_round+env.polling_active_count); - -} - /********************************************** * GTEST MAIN * **********************************************/ |
