Change API Component(Wrapper<name> name, auto& context) -> Component(T& context) T::kName

This commit is contained in:
sha512sum 2024-07-01 18:48:32 +00:00
parent 3e1c4cfb84
commit 4d917d6375
8 changed files with 23 additions and 24 deletions

View file

@ -6,8 +6,8 @@ struct SomeComponent : public cserver::server::handlers::HttpHandlerBaseWithAdde
static constexpr utempl::ConstexprString kPath = "/v1/some/"; static constexpr utempl::ConstexprString kPath = "/v1/some/";
static constexpr utempl::ConstexprString kName = "name"; static constexpr utempl::ConstexprString kName = "name";
static constexpr utempl::ConstexprString kHandlerManagerName = "server"; static constexpr utempl::ConstexprString kHandlerManagerName = "server";
inline constexpr SomeComponent(auto name, auto& context) : inline constexpr SomeComponent(auto& context) :
HttpHandlerBaseWithAdder(name, context) {}; HttpHandlerBaseWithAdder(context) {};
inline auto HandleRequestThrow(const cserver::server::http::HttpRequest& request) -> cserver::Task<cserver::server::http::HttpResponse> { inline auto HandleRequestThrow(const cserver::server::http::HttpRequest& request) -> cserver::Task<cserver::server::http::HttpResponse> {
co_return cserver::server::http::HttpResponse{.body = request.url.data()}; co_return cserver::server::http::HttpResponse{.body = request.url.data()};

View file

@ -6,7 +6,7 @@ namespace cserver {
struct StopBlocker { struct StopBlocker {
boost::asio::io_context::work guard; boost::asio::io_context::work guard;
inline constexpr StopBlocker(auto, auto& context) : inline constexpr StopBlocker(auto& context) :
guard(context.template FindComponent<kBasicTaskProcessorName>().ioContext) {}; guard(context.template FindComponent<kBasicTaskProcessorName>().ioContext) {};
}; };

View file

@ -126,6 +126,7 @@ struct ServiceContextForComponent {
T& context; T& context;
static constexpr auto kConfig = T::kConfig; static constexpr auto kConfig = T::kConfig;
static constexpr auto kUtils = T::kUtils; static constexpr auto kUtils = T::kUtils;
static constexpr auto kName = Component::kName;
template <std::size_t I> template <std::size_t I>
constexpr auto FindComponent() -> decltype(this->context.template FindComponent<Component, I>()) { constexpr auto FindComponent() -> decltype(this->context.template FindComponent<Component, I>()) {
@ -174,8 +175,7 @@ inline constexpr auto InitComponents(T& ccontext) -> void {
co_await flag->AsyncWait(); co_await flag->AsyncWait();
}; };
ServiceContextForComponent<decltype(Get<Is>(decltype(T::kUtils)::kComponentConfigs)), T> currentContext{context}; ServiceContextForComponent<decltype(Get<Is>(decltype(T::kUtils)::kComponentConfigs)), T> currentContext{context};
Get<Is>(context.storage).emplace(utempl::Wrapper<Get<Is>(T::kUtils.kNames)>{}, Get<Is>(context.storage).emplace(currentContext);
currentContext);
auto& componentInitFlag = GetInitFlagFor<AsyncConditionVariable, Is>(ioContext); auto& componentInitFlag = GetInitFlagFor<AsyncConditionVariable, Is>(ioContext);
componentInitFlag.NotifyAll(); componentInitFlag.NotifyAll();
if constexpr(requires{Get<Is>(context.storage)->Run();}) { if constexpr(requires{Get<Is>(context.storage)->Run();}) {
@ -311,7 +311,7 @@ template <typename Current, ConstexprConfig Config, typename... Ts>
struct DependencyInfoInjector { struct DependencyInfoInjector {
static constexpr ConstexprConfig kConfig = Config; static constexpr ConstexprConfig kConfig = Config;
static constexpr DependenciesUtils<Ts...> kUtils; static constexpr DependenciesUtils<Ts...> kUtils;
static constexpr utempl::ConstexprString kName = Current::kName;
template <utempl::ConstexprString name> template <utempl::ConstexprString name>
static consteval auto FindComponentType() { static consteval auto FindComponentType() {
if constexpr(name == kBasicTaskProcessorName) { if constexpr(name == kBasicTaskProcessorName) {
@ -392,7 +392,7 @@ public:
}; };
template <utempl::ConstexprString name> template <utempl::ConstexprString name>
static inline consteval auto Inject() { static inline consteval auto Inject() {
Ignore<decltype(Use<Current, utempl::Wrapper<name>{}, DependencyInfoInjector<Current, Config, Ts...>{}>())>(); Ignore<decltype(Use<Current, DependencyInfoInjector<Current, Config, Ts...>{}>())>();
}; };
}; };

View file

@ -40,7 +40,7 @@ struct HttpHandlerBase {
}; };
co_await stream.Close(); co_await stream.Close();
}; };
inline constexpr HttpHandlerBase(auto, auto&) {}; inline constexpr HttpHandlerBase(auto&) {};
}; };
template <typename T> template <typename T>
struct HttpHandlerAdderType { struct HttpHandlerAdderType {
@ -51,8 +51,8 @@ struct HttpHandlerAdderType {
}; };
template <typename T> template <typename T>
struct HttpHandlerBaseWithAdder : HttpHandlerBase, HttpHandlerAdderType<T> { struct HttpHandlerBaseWithAdder : HttpHandlerBase, HttpHandlerAdderType<T> {
inline constexpr HttpHandlerBaseWithAdder(auto name, auto& context) : inline constexpr HttpHandlerBaseWithAdder(auto& context) :
HttpHandlerBase(name, context), HttpHandlerBase(context),
HttpHandlerAdderType<T>{} {}; HttpHandlerAdderType<T>{} {};
}; };

View file

@ -35,18 +35,17 @@ struct Server : StopBlocker {
}); });
}; };
template < template <
utempl::ConstexprString Name,
typename T, typename T,
std::size_t... Is> std::size_t... Is>
inline constexpr Server(std::index_sequence<Is...>, utempl::Wrapper<Name> name, T& context) : inline constexpr Server(std::index_sequence<Is...>, T& context) :
StopBlocker(name, context), StopBlocker(context),
taskProcessor(context.template FindComponent<TPName>()), taskProcessor(context.template FindComponent<TPName>()),
handlers{context.template FindComponent<Get<Is>(kNames)>()...}, handlers{context.template FindComponent<Get<Is>(kNames)>()...},
port(T::kConfig.template Get<Name>().template Get<"port">()) { port(T::kConfig.template Get<T::kName>().template Get<"port">()) {
}; };
inline constexpr Server(auto name, auto& context) : inline constexpr Server(auto& context) :
Server(std::index_sequence_for<Ts...>{}, name, context) { Server(std::index_sequence_for<Ts...>{}, context) {
}; };
template<auto I, typename Socket> template<auto I, typename Socket>
auto ProcessHandler(Socket&& socket, http::HttpRequest request) -> Task<void> { auto ProcessHandler(Socket&& socket, http::HttpRequest request) -> Task<void> {

View file

@ -6,7 +6,7 @@ COMPONENT_REQUIRES(Some, requires(T t){{t.f()} -> std::same_as<void>;});
struct SomeComponent { struct SomeComponent {
static constexpr utempl::ConstexprString kName = "some"; static constexpr utempl::ConstexprString kName = "some";
constexpr SomeComponent(auto, auto& context) { constexpr SomeComponent(auto& context) {
context.template FindAllComponents<SomeM>(); context.template FindAllComponents<SomeM>();
}; };
}; };
@ -14,13 +14,13 @@ struct SomeComponent {
struct OtherComponent { struct OtherComponent {
static constexpr utempl::ConstexprString kName = "other"; static constexpr utempl::ConstexprString kName = "other";
auto f() -> void {}; auto f() -> void {};
constexpr OtherComponent(auto, auto& context) {}; constexpr OtherComponent(auto& context) {};
}; };
struct OtherComponent2 { struct OtherComponent2 {
static constexpr utempl::ConstexprString kName = "other2"; static constexpr utempl::ConstexprString kName = "other2";
auto f() -> void {}; auto f() -> void {};
constexpr OtherComponent2(auto, auto& context) {}; constexpr OtherComponent2(auto& context) {};
}; };

View file

@ -4,14 +4,14 @@
struct SomeComponent { struct SomeComponent {
static constexpr utempl::ConstexprString kName = "some"; static constexpr utempl::ConstexprString kName = "some";
constexpr SomeComponent(auto, auto&) {}; constexpr SomeComponent(auto&) {};
}; };
struct SomeOtherComponent { struct SomeOtherComponent {
SomeComponent& component; SomeComponent& component;
static constexpr utempl::ConstexprString kName = "other"; static constexpr utempl::ConstexprString kName = "other";
constexpr SomeOtherComponent(auto, auto& context) : component(context.template FindComponent<"some">()) { constexpr SomeOtherComponent(auto& context) : component(context.template FindComponent<"some">()) {
}; };
}; };

View file

@ -6,7 +6,7 @@ COMPONENT_REQUIRES(Some, requires(T t){{t.f()} -> std::same_as<void>;});
struct SomeComponent { struct SomeComponent {
static constexpr utempl::ConstexprString kName = "some"; static constexpr utempl::ConstexprString kName = "some";
constexpr SomeComponent(auto, auto& context) { constexpr SomeComponent(auto& context) {
context.template FindComponent<SomeM>(); context.template FindComponent<SomeM>();
}; };
}; };
@ -14,13 +14,13 @@ struct SomeComponent {
struct OtherComponent { struct OtherComponent {
static constexpr utempl::ConstexprString kName = "other"; static constexpr utempl::ConstexprString kName = "other";
auto f() -> void {}; auto f() -> void {};
constexpr OtherComponent(auto, auto& context) {}; constexpr OtherComponent(auto& context) {};
}; };
struct OtherComponent2 { struct OtherComponent2 {
static constexpr utempl::ConstexprString kName = "other2"; static constexpr utempl::ConstexprString kName = "other2";
auto f() -> void {}; auto f() -> void {};
constexpr OtherComponent2(auto, auto& context) {}; constexpr OtherComponent2(auto& context) {};
}; };