From 08d1389b10c2b7fa07de2692a22723f006259e52 Mon Sep 17 00:00:00 2001 From: Lord-Turmoil Date: Sun, 1 Dec 2024 13:11:00 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9A=92=EF=B8=8Fadd=20request=20handler=20wra?= =?UTF-8?q?pper=20=F0=9F=90=9Bwebhost=20builder=20appsettings=20path=20?= =?UTF-8?q?=E2=9C=A8demo=20client=20now=20wait=20for=20process=20to=20fini?= =?UTF-8?q?sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/demo.cpp | 4 ++-- include/minet/components/RequestHandler.h | 13 ++++++++----- include/minet/core/WebHostBuilder.h | 2 +- scripts/demo.sh | 17 +++++++++++++---- src/core/WebHostBuilder.cpp | 3 +-- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/demo/demo.cpp b/demo/demo.cpp index d8a6b9d..09b3a95 100644 --- a/demo/demo.cpp +++ b/demo/demo.cpp @@ -37,8 +37,8 @@ int main(int argc, char* argv[]) logger = builder->GetLogger("Demo"); // Register handlers and run the server. - builder->Get("/ping", RequestHandler<>::Bind(ping)) - ->Post("/echo", RequestHandler::Bind(echo)) + builder->Get("/ping", RequestHandler::Bind(ping)) + ->Post("/echo", CustomHandler::Bind(echo)) ->Build() ->Run(); diff --git a/include/minet/components/RequestHandler.h b/include/minet/components/RequestHandler.h index 7991fd0..2d5c3ab 100644 --- a/include/minet/components/RequestHandler.h +++ b/include/minet/components/RequestHandler.h @@ -7,10 +7,10 @@ #include "minet/core/IRequestHandler.h" +#include "minet/common/Http.h" #include "minet/components/Requests.h" #include "minet/components/Responses.h" #include "minet/core/HttpContext.h" -#include "minet/common/Http.h" #include @@ -48,13 +48,12 @@ template struct ResponseFormatter * @tparam TRequest Type of the request. * @tparam TResponse Type of the response. */ -template -class RequestHandler final : public IRequestHandler +template class RequestHandlerImpl final : public IRequestHandler { public: using RequestHandlerFn = std::function; - explicit RequestHandler(RequestHandlerFn handler) : _handler(std::move(handler)) + explicit RequestHandlerImpl(RequestHandlerFn handler) : _handler(std::move(handler)) { } @@ -76,13 +75,17 @@ class RequestHandler final : public IRequestHandler static Ref Bind(RequestHandlerFn handler) { - return CreateRef(std::move(handler)); + return CreateRef(std::move(handler)); } private: RequestHandlerFn _handler; }; +using RequestHandler = RequestHandlerImpl; +using RestfulHandler = RequestHandlerImpl; +template using CustomHandler = RequestHandlerImpl; + /* * =================================================================== * ------------------------- Specializations ------------------------- diff --git a/include/minet/core/WebHostBuilder.h b/include/minet/core/WebHostBuilder.h index 0616ac4..cb44775 100644 --- a/include/minet/core/WebHostBuilder.h +++ b/include/minet/core/WebHostBuilder.h @@ -46,7 +46,7 @@ class WebHostBuilder final : public std::enable_shared_from_this * This must be called before any other methods, and it should only be * called once. */ - Ref UseAppSettings(const std::string& path = ""); + Ref UseAppSettings(const std::string& path = "appsettings.json"); Ref Get(const std::string& path, const Ref& handler); Ref Post(const std::string& path, const Ref& handler); diff --git a/scripts/demo.sh b/scripts/demo.sh index aea28ec..f8a84da 100755 --- a/scripts/demo.sh +++ b/scripts/demo.sh @@ -31,7 +31,6 @@ function run_server() { function send_requests() { BASE_URL="localhost:5000" ROUND=${1:-10} - start=`date +%s` for (( i = 1; i <= $ROUND; i++ )); do rand=$(( RANDOM % 2 )) # choose 0 or 1 if [ $rand -eq 0 ]; then @@ -47,8 +46,6 @@ function send_requests() { # rand=$(( RANDOM % 3 )) # sleep 0-3 seconds # sleep $rand done - end=`date +%s` - echo "Sent $ROUND requests in $((end-start)) seconds" } function run_client() { @@ -58,13 +55,23 @@ function run_client() { ROUND=${2:?"Expect round"} if [ $LEVEL -gt 0 ]; then bash $0 client _ $((LEVEL-1)) $ROUND & + c1=$! bash $0 client _ $((LEVEL-1)) $ROUND & + c2=$! + wait $c1 + wait $c2 else send_requests $ROUND fi else ROUND=${1:-10} + start=`date +%s` + bash $0 client _ 2 $ROUND + wait $! + + end=`date +%s` + echo "Sent $((ROUND*4)) ($ROUND * 4) requests in $((end-start)) seconds" fi } @@ -74,7 +81,9 @@ if [ "$option" == "server" ]; then echo -e "\033[0;32mChoose to run server\033[0m" run_server $@ elif [ "$option" == "client" ]; then - echo -e "\033[0;32mChoose to run client...\033[0m" + if [ "$1" != "_" ]; then + echo -e "\033[0;32mChoose to run client...\033[0m" + fi run_client $@ else echo "Usage: $0 [server|client] [args]" diff --git a/src/core/WebHostBuilder.cpp b/src/core/WebHostBuilder.cpp index b7a0bc8..6ce4d97 100644 --- a/src/core/WebHostBuilder.cpp +++ b/src/core/WebHostBuilder.cpp @@ -15,8 +15,7 @@ MINET_BEGIN static void _PrintBanner(); -WebHostBuilder::WebHostBuilder(Private) - : _appSettingsPath("appsettings.json"), _container(mioc::ServiceContainer::New(true)), _initialized(false) +WebHostBuilder::WebHostBuilder(Private) : _container(mioc::ServiceContainer::New(true)), _initialized(false) { _PrintBanner(); }