界面美化
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
#include <drogon/drogon.h>
|
||||
#include <nlohmann/json.hpp>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
@@ -122,6 +123,43 @@ int run_web_server(std::uint16_t port, const std::filesystem::path& asset_root)
|
||||
});
|
||||
}, {drogon::Put});
|
||||
|
||||
app.registerHandler("/plot/{1}/data/generate", [plots](
|
||||
const drogon::HttpRequestPtr& request,
|
||||
std::function<void(const drogon::HttpResponsePtr&)>&& callback,
|
||||
std::string plot_id) {
|
||||
auto plot = find_plot(*plots, plot_id);
|
||||
if (!plot) {
|
||||
callback(error_response(drogon::k404NotFound, "unknown plot"));
|
||||
return;
|
||||
}
|
||||
nlohmann::json input;
|
||||
try {
|
||||
input = nlohmann::json::parse(request->body());
|
||||
} catch (const nlohmann::json::exception&) {
|
||||
callback(error_response(drogon::k400BadRequest, "invalid data generation request"));
|
||||
return;
|
||||
}
|
||||
if (!input.contains("count") || !input["count"].is_number_unsigned()
|
||||
|| !input.contains("minimum") || !input["minimum"].is_number()
|
||||
|| !input.contains("maximum") || !input["maximum"].is_number()) {
|
||||
callback(error_response(drogon::k400BadRequest, "count, minimum and maximum are required"));
|
||||
return;
|
||||
}
|
||||
const auto count = input["count"].get<std::size_t>();
|
||||
const auto minimum = input["minimum"].get<double>();
|
||||
const auto maximum = input["maximum"].get<double>();
|
||||
if (count == 0 || count > 1'000'000 || !std::isfinite(minimum)
|
||||
|| !std::isfinite(maximum) || minimum >= maximum) {
|
||||
callback(error_response(drogon::k400BadRequest, "invalid count or range"));
|
||||
return;
|
||||
}
|
||||
auto output = std::make_shared<std::function<void(const drogon::HttpResponsePtr&)>>(
|
||||
std::move(callback));
|
||||
plot->async_generate_data(count, minimum, maximum, [output](nlohmann::json result) {
|
||||
(*output)(json_response(std::move(result)));
|
||||
});
|
||||
}, {drogon::Post});
|
||||
|
||||
app.registerController(websocket)
|
||||
.setDocumentRoot(asset_root.string())
|
||||
.setHomePage("index.html")
|
||||
|
||||
Reference in New Issue
Block a user