From 668a747325c15dda1a861e7dc829cf6fdfa246d5 Mon Sep 17 00:00:00 2001 From: snider Date: Thu, 16 Oct 2025 14:10:04 +0100 Subject: [PATCH] adds blockcontroller / chain data --- src/api/ApiServer.cpp | 15 +++++++++++---- src/api/ApiServer.hpp | 14 ++++++++++++-- src/api/CMakeLists.txt | 8 ++++++-- src/api/controller/ApiCoreInfoComponent.hpp | 16 +++++++++++----- src/daemon/daemon.cpp | 2 +- 5 files changed, 41 insertions(+), 14 deletions(-) diff --git a/src/api/ApiServer.cpp b/src/api/ApiServer.cpp index 19b16dc6..43243c73 100644 --- a/src/api/ApiServer.cpp +++ b/src/api/ApiServer.cpp @@ -1,4 +1,5 @@ #include "ApiServer.hpp" +#include "controller/ApiCoreInfoComponent.hpp" #include "controller/InfoController.hpp" #include "controller/BlockController.hpp" @@ -23,7 +24,8 @@ void ApiServer::init_options(boost::program_options::options_description& desc) command_line::add_arg(desc, arg_api_bind_host); } -ApiServer::ApiServer(const boost::program_options::variables_map& vm) : m_vm(vm) { +ApiServer::ApiServer(const boost::program_options::variables_map& vm, currency::core* ccore, p2psrv_t* p2p, currency::core_rpc_server* rpc_server) + : m_vm(vm), m_ccore(ccore), m_p2p(p2p), m_rpc_server(rpc_server) { if (vm.count(arg_api_bind_port.name)) { m_port = vm[arg_api_bind_port.name].as(); } @@ -37,6 +39,11 @@ void ApiServer::run() { /* Register Components in scope of run() method */ Components components; + OATPP_CREATE_COMPONENT(std::shared_ptr, coreInfoComponent) + ([this] { + return std::make_shared(*m_ccore, *m_p2p, *m_rpc_server); + }()); + /* Get router component */ OATPP_COMPONENT(std::shared_ptr, router); @@ -45,11 +52,11 @@ void ApiServer::run() { auto infoController = std::make_shared(); docEndpoints->append(infoController->getEndpoints()); - // auto blockController = std::make_shared(); - // docEndpoints->append(blockController->getEndpoints()); + auto blockController = std::make_shared(); + docEndpoints->append(blockController->getEndpoints()); router->addController(infoController); - // router->addController(blockController); + router->addController(blockController); OATPP_CREATE_COMPONENT(std::shared_ptr, swaggerDocumentInfo) ([] diff --git a/src/api/ApiServer.hpp b/src/api/ApiServer.hpp index 55ee92f2..20eeff66 100644 --- a/src/api/ApiServer.hpp +++ b/src/api/ApiServer.hpp @@ -1,8 +1,11 @@ #ifndef ApiServer_hpp #define ApiServer_hpp -#include "currency_core/blockchain_storage.h" #include "currency_core/currency_core.h" +#include "p2p/net_node.h" +#include "currency_protocol/currency_protocol_handler.h" +#include "rpc/core_rpc_server.h" + #include "oatpp/web/server/HttpConnectionHandler.hpp" #include "oatpp/network/tcp/server/ConnectionProvider.hpp" #include "oatpp/parser/json/mapping/ObjectMapper.hpp" @@ -14,12 +17,19 @@ namespace po = boost::program_options; +// Define the p2p server type to avoid verbose template syntax +typedef nodetool::node_server> p2psrv_t; + class ApiServer { private: std::thread m_server_thread; std::shared_ptr m_server; boost::program_options::variables_map m_vm; + currency::core* m_ccore; + p2psrv_t* m_p2p; + currency::core_rpc_server* m_rpc_server; + void run(); public: @@ -28,7 +38,7 @@ public: static void init_options(po::options_description& desc); - ApiServer(const boost::program_options::variables_map& vm); + ApiServer(const boost::program_options::variables_map& vm, currency::core* ccore, p2psrv_t* p2p, currency::core_rpc_server* rpc_server); class Components { public: diff --git a/src/api/CMakeLists.txt b/src/api/CMakeLists.txt index e0c0f54a..7cc58819 100644 --- a/src/api/CMakeLists.txt +++ b/src/api/CMakeLists.txt @@ -35,10 +35,14 @@ target_link_libraries(lthn_api PUBLIC # This assumes the executable is in 'bin' and resources are in 'share/lthn_api'. target_compile_definitions(lthn_api PUBLIC -DOATPP_SWAGGER_RES_PATH="../share/lthn_api/res") -# Install swagger resources to a conventional location. +# Copy resources to build directory for development builds (e.g. running in CLion) +file(COPY ${oatpp-swagger_INCLUDE_DIRS}/../bin/oatpp-swagger/res DESTINATION ${CMAKE_BINARY_DIR}/share/lthn_api) +file(COPY ${CMAKE_SOURCE_DIR}/utils/sdk/spec/oas-3.0.0.json DESTINATION ${CMAKE_BINARY_DIR}/share/lthn_api) + +# Install swagger resources to a conventional location for packaging. install(DIRECTORY ${oatpp-swagger_INCLUDE_DIRS}/../bin/oatpp-swagger/res DESTINATION share/lthn_api) -# Install OpenAPI spec for SDK generation +# Install OpenAPI spec for SDK generation for packaging. install(FILES ${CMAKE_SOURCE_DIR}/utils/sdk/spec/oas-3.0.0.json DESTINATION share/lthn_api) diff --git a/src/api/controller/ApiCoreInfoComponent.hpp b/src/api/controller/ApiCoreInfoComponent.hpp index 38daa2d9..0a9ca071 100644 --- a/src/api/controller/ApiCoreInfoComponent.hpp +++ b/src/api/controller/ApiCoreInfoComponent.hpp @@ -2,22 +2,28 @@ #define ApiCoreInfoComponent_hpp #include "currency_core/currency_core.h" -#include "currency_protocol/currency_protocol_handler.h" // Full definition needed for template instantiation #include "p2p/net_node.h" +#include "currency_protocol/currency_protocol_handler.h" +#include "rpc/core_rpc_server.h" + +// Define the p2p server type to avoid verbose template syntax +typedef nodetool::node_server> p2psrv_t; // A simple holder for core blockchain components that can be injected into controllers. class ApiCoreInfoComponent { private: currency::core& m_core; - nodetool::node_server>& m_p2p; + p2psrv_t& m_p2p; + currency::core_rpc_server& m_rpc_server; public: - ApiCoreInfoComponent(currency::core& core, nodetool::node_server>& p2p) - : m_core(core), m_p2p(p2p) + ApiCoreInfoComponent(currency::core& core, p2psrv_t& p2p, currency::core_rpc_server& rpc_server) + : m_core(core), m_p2p(p2p), m_rpc_server(rpc_server) {} currency::core& getCore() { return m_core; } - nodetool::node_server>& getP2p() { return m_p2p; } + p2psrv_t& getP2p() { return m_p2p; } + currency::core_rpc_server& getRpcServer() { return m_rpc_server; } }; #endif /* ApiCoreInfoComponent_hpp */ diff --git a/src/daemon/daemon.cpp b/src/daemon/daemon.cpp index 9640b006..f9214cfa 100644 --- a/src/daemon/daemon.cpp +++ b/src/daemon/daemon.cpp @@ -470,7 +470,7 @@ int main(int argc, char* argv[]) // Initialize API server oatpp::base::Environment::init(); - ApiServer api_server(vm); + ApiServer api_server(vm, &ccore, &p2psrv, &rpc_server); api_server.start(); // Setup signal handler to gracefully stop the main p2p loop