From 07033c9d139159a29d17efc7c3015469c0f18fc0 Mon Sep 17 00:00:00 2001 From: oxmox Date: Sun, 12 Feb 2023 13:40:41 +0100 Subject: [PATCH] mini refactoring and cleanup --- src/doompanning.cc | 111 ++++++++++++++------------------------------- src/doomsim.cc | 37 ++++++++------- 2 files changed, 53 insertions(+), 95 deletions(-) diff --git a/src/doompanning.cc b/src/doompanning.cc index 69582a1..857f390 100644 --- a/src/doompanning.cc +++ b/src/doompanning.cc @@ -7,7 +7,6 @@ #include #include "dp_common.h" -#include "log.h" void dp_sdl_fatal(const char *const msg) { @@ -15,13 +14,17 @@ void dp_sdl_fatal(const char *const msg) abort(); } -static const size_t NumDooms = 3; - -int doom_controller_loop(nng_socket pubSock, nng_socket subSock, SDL_Window *window, SDL_Renderer *renderer) +struct ControllerContext { - bool show_demo_window = true; - bool show_another_window = false; - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); + nng_socket pub; + nng_socket sub; + SDL_Window *window; + SDL_Renderer *renderer; +}; + +int doom_controller_loop(ControllerContext *ctx) +{ + static constexpr ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); bool done = false; @@ -34,8 +37,13 @@ int doom_controller_loop(nng_socket pubSock, nng_socket subSock, SDL_Window *win if (event.type == SDL_QUIT) done = true; - if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_CLOSE && event.window.windowID == SDL_GetWindowID(window)) + + if (event.type == SDL_WINDOWEVENT + && event.window.event == SDL_WINDOWEVENT_CLOSE + && event.window.windowID == SDL_GetWindowID(ctx->window)) + { done = true; + } } // Start the Dear ImGui frame @@ -43,15 +51,13 @@ int doom_controller_loop(nng_socket pubSock, nng_socket subSock, SDL_Window *win ImGui_ImplSDL2_NewFrame(); ImGui::NewFrame(); - if (show_demo_window) - ImGui::ShowDemoWindow(&show_demo_window); - // Rendering ImGui::Render(); - SDL_SetRenderDrawColor(renderer, (Uint8)(clear_color.x * 255), (Uint8)(clear_color.y * 255), (Uint8)(clear_color.z * 255), (Uint8)(clear_color.w * 255)); - SDL_RenderClear(renderer); + SDL_SetRenderDrawColor(ctx->renderer, + (u8)(clear_color.x * 255), (u8)(clear_color.y * 255), (u8)(clear_color.z * 255), (u8)(clear_color.w * 255)); + SDL_RenderClear(ctx->renderer); ImGui_ImplSDLRenderer_RenderDrawData(ImGui::GetDrawData()); - SDL_RenderPresent(renderer); + SDL_RenderPresent(ctx->renderer); } return 0; @@ -64,11 +70,6 @@ int main(int argc, char *argv[]) log_info("doompanning ctrl starting"); - dp_nng_init_limits(1, 1, 1); - - auto pubSock = make_ctrl_pub(CtrlUrl); - auto subSock = make_ctrl_sub(DoomUrl); - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)) dp_sdl_fatal("SDL_Init"); @@ -92,65 +93,23 @@ int main(int argc, char *argv[]) ImGui_ImplSDL2_InitForSDLRenderer(window, renderer); ImGui_ImplSDLRenderer_Init(renderer); - int ret = doom_controller_loop(pubSock, subSock, window, renderer); + dp_nng_init_limits(1, 1, 1); + + auto pubSock = make_ctrl_pub(CtrlUrl); + auto subSock = make_ctrl_sub(DoomUrl); + + ControllerContext ctx + { + pubSock, + subSock, + window, + renderer + }; + + int ret = doom_controller_loop(&ctx); nng_close(pubSock); nng_close(subSock); return ret; -} - -// doomctrl test code - #if 0 - size_t readyCount = 0; - - log_debug("ctrl waiting for hello from dooms"); - while (readyCount < numDooms) - { - char *buf = nullptr; - size_t sz = 0; - - if (auto res = nng_recv(subSock, &buf, &sz, NNG_FLAG_ALLOC)) - dp_nng_fatal("run_ctrl/sub/go", res); - - log_debug("ctrl received %zu bytes from a doom", sz); - nng_free(buf, sz); - ++readyCount; - } - - log_debug("ctrl is unleashing dooms"); - - if (auto res = nng_send(pubSock, (void *)&readyCount, sizeof(readyCount), 0)) - dp_nng_fatal("run_ctrl/pub/unleash", res); - - #endif - -// doomsim test code - #if 0 - while (true) // FIXME: ctrl code does not work this way - { - log_debug("doom%zu sending hello", id); - if (auto res = nng_send(pubSock, (void *)&id, sizeof(id), 0)) - dp_nng_fatal("run_doom/pub/hello", res); - - { - char *buf = nullptr; - size_t sz = 0; - - log_debug("doom%zu waiting for unleash", id); - auto res = nng_recv(subSock, &buf, &sz, NNG_FLAG_ALLOC | NNG_FLAG_NONBLOCK); - - if (res == NNG_EAGAIN) - { - usleep(10 * 1000); - continue; - } - else if (res) - dp_nng_fatal("run_doom/sub/go", res); - - log_debug("doom%zu unleashed by %zu bytes!", id, sz); - nng_free(buf, sz); - break; - } - } - #endif +} \ No newline at end of file diff --git a/src/doomsim.cc b/src/doomsim.cc index 7696ee9..db4a950 100644 --- a/src/doomsim.cc +++ b/src/doomsim.cc @@ -6,7 +6,6 @@ #include #include #include "dp_common.h" -#include "log.h" enum DP_DoomState { @@ -25,7 +24,7 @@ static const char *const DP_DoomState_Strings[DP_DS_COUNT] = #define doomstate_str(s) DP_DoomState_Strings[s] -struct DoomContext; +typedef struct DoomContext DoomContext; #define DEF_DOOM_STATE_FUNC(fn) int fn(DoomContext *ctx) @@ -113,29 +112,20 @@ DEF_DOOM_STATE_FUNC(do_doom_running) return 0; } -int doom_loop(nng_socket pubSock, nng_socket subSock, doomid_t doomId) +int doom_loop(DoomContext *ctx) { - log_debug("doom#%zu started", doomId); - - DoomContext ctx - { - pubSock, - subSock, - doomId, - DP_DS_Ready, - do_doom_ready, - }; + log_debug("doom#%zu started", ctx->id); int res = 0; - while (ctx.state != DP_DS_Quit && res == 0) + while (ctx->state != DP_DS_Quit && res == 0) { - DP_DoomState prevState = ctx.state; - res = ctx.f(&ctx); - if (prevState != ctx.state) + DP_DoomState prevState = ctx->state; + res = ctx->f(ctx); + if (prevState != ctx->state) { log_info("transition %s -> %s", - doomstate_str(prevState), doomstate_str(ctx.state)); + doomstate_str(prevState), doomstate_str(ctx->state)); } } @@ -167,7 +157,16 @@ int main(int argc, char *argv[]) auto pubSock = make_doom_pub(DoomUrl); auto subSock = make_doom_sub(CtrlUrl); - int ret = doom_loop(pubSock, subSock, *doomId); + DoomContext ctx + { + pubSock, + subSock, + *doomId, + DP_DS_Ready, + do_doom_ready, + }; + + int ret = doom_loop(&ctx); nng_close(pubSock); nng_close(subSock);