WebFramework v3.0.12
Web framework for C++.
Loading...
Searching...
No Matches
ExecutorsManager.h
1#pragma once
2
3#include "Import/WebFrameworkCore.h"
4
5#include "Executors/BaseExecutor.h"
6#include "Utility/JSONSettingsParser.h"
7#include "Executors/ResourceExecutor.h"
8#include "Utility/RouteParameters.h"
9
10namespace framework
11{
13 {
14 private:
15 enum class webServerType
16 {
17 multiThreaded,
18 threadPool,
19 loadBalancer,
20 proxy
21 };
22
23 private:
24 std::mutex checkExecutor;
25 std::unordered_map<std::string, std::unique_ptr<BaseExecutor>> routes; // route - executor
26 std::unordered_map<std::string, createExecutorFunction> creators; // executor name - create function
27 std::unordered_map<std::string, utility::JSONSettingsParser::ExecutorSettings> settings; // route - executor settings
28 std::shared_ptr<ResourceExecutor> resources;
29 std::vector<utility::RouteParameters> routeParameters; // base routes for parameterize executors
30 webServerType serverType;
31
32 private:
33 static bool isFileRequest(std::string_view parameters);
34
35 static bool isHeavyOperation(BaseExecutor* executor);
36
37 static void parseRouteParameters(const std::string& parameters, HTTPRequest& request, std::vector<utility::RouteParameters>::iterator it);
38
39 private:
40 BaseExecutor* getExecutor(std::string& parameters, HTTPRequest& request, std::unordered_map<std::string, std::unique_ptr<BaseExecutor>>& statefulExecutors);
41
42 public:
44
45 ExecutorsManager(const ExecutorsManager&) = delete;
46
47 ExecutorsManager& operator = (const ExecutorsManager&) = delete;
48
49 ExecutorsManager(ExecutorsManager&& other) noexcept;
50
51 ExecutorsManager& operator = (ExecutorsManager&& other) noexcept;
52
53 void init
54 (
55 const json::JSONParser& configuraion,
56 const std::filesystem::path& assets,
57 uint64_t cachingSize,
58 const std::filesystem::path& pathToTemplates,
59 std::unordered_map<std::string, std::unique_ptr<BaseExecutor>>&& routes,
60 std::unordered_map<std::string, createExecutorFunction>&& creators,
61 std::unordered_map<std::string, utility::JSONSettingsParser::ExecutorSettings>&& settings,
62 std::vector<utility::RouteParameters>&& routeParameters
63 );
64
65 std::optional<std::function<void(HTTPRequest&, HTTPResponse&)>> service(HTTPRequest& request, HTTPResponse& response, std::unordered_map<std::string, std::unique_ptr<BaseExecutor>>& statefulExecutors);
66
67 std::shared_ptr<ResourceExecutor> getResourceExecutor() const;
68
69 ~ExecutorsManager() = default;
70 };
71}
Base class for all executors.
Parsing HTTP request.
Definition HTTPRequest.h:25
HTTPBuilder wrapper.