Files
Renderive/web_server/app/Web_Plot_Session.h
2026-08-18 12:15:41 +08:00

39 lines
981 B
C++

#pragma once
#include "Web_Event.h"
#include <exception>
#include <functional>
#include <memory>
#include <optional>
#include <string>
namespace renderive::web {
enum class Web_Response_Type : std::uint8_t { Pixels, Json };
struct Web_Response {
Web_Response_Type type = Web_Response_Type::Pixels;
std::string payload;
};
struct Web_Async_Response {
std::optional<Web_Response> response;
std::exception_ptr exception;
};
using Web_Response_Completion = std::function<void(Web_Async_Response)>;
class Web_Plot_Session final {
public:
Web_Plot_Session();
~Web_Plot_Session();
Web_Plot_Session(const Web_Plot_Session&) = delete;
Web_Plot_Session& operator=(const Web_Plot_Session&) = delete;
[[nodiscard]] std::optional<Web_Response> handle(const Web_Event& event);
void async_handle(const Web_Event& event, Web_Response_Completion completion);
private:
struct Impl;
std::unique_ptr<Impl> impl_;
};
} // namespace renderive::web