22 return absl::AlreadyExistsError(
"Server is already running");
26 return absl::InternalError(
"HttpServer is not valid");
32 const std::string address = loopback_only ?
"127.0.0.1" :
bind_address_;
34 return absl::UnavailableError(
"HTTP API port is already in use");
40 LOG_INFO(
"HttpServer",
"Starting API server on port %d",
port);
41 bool ret =
server_->listen_after_bind();
50 return absl::OkStatus();
55 LOG_INFO(
"HttpServer",
"Bonjour discovery published on port %d",
port);
57 LOG_ERROR(
"HttpServer",
"Bonjour discovery failed to publish on port %d",
62 "Bonjour discovery not available on this platform, skipping");
65 return absl::OkStatus();
83 server_->Post(
"/api/v1/editor/control",
84 [
this](
const httplib::Request& req, httplib::Response& res) {
91 server_->Get(
"/api/v1/health", [](
const httplib::Request&,
92 httplib::Response& res) {
93 res.set_content(R
"({"status":"ok","service":"yaze-editor-control/v1"})",
99 [](
const httplib::Request& req, httplib::Response& res) {
102 if (!res.body.empty()) {
105 const char* message =
"Request failed";
106 switch (res.status) {
108 message =
"Bad request";
111 message =
"Not found";
114 message =
"Method not allowed";
117 message =
"Not implemented";
120 message =
"Service unavailable";
123 message =
"Internal server error";
128 std::string body = std::string(
"{\"error\":\"") + message +
"\"}";
129 res.set_content(body,
"application/json");
133 [
this](
const httplib::Request& req, httplib::Response& res) {
140 server_->Get(
"/api/v1/symbols",
141 [
this](
const httplib::Request& req, httplib::Response& res) {
157 server_->Post(
"/api/v1/window/show",
158 [
this](
const httplib::Request& req, httplib::Response& res) {
163 server_->Post(
"/api/v1/window/hide",
164 [
this](
const httplib::Request& req, httplib::Response& res) {
169 server_->Get(
"/api/v1/render/dungeon",
170 [
this](
const httplib::Request& req, httplib::Response& res) {
177 server_->Get(
"/api/v1/render/dungeon/metadata",
178 [
this](
const httplib::Request& req, httplib::Response& res) {
187 server_->Post(
"/api/v1/command/execute",
188 [
this](
const httplib::Request& req, httplib::Response& res) {
200 auto project_path_lambda = [
this]() -> std::string {
203 server_->Get(
"/api/v1/annotations",
204 [project_path_lambda](
const httplib::Request& req,
205 httplib::Response& res) {
208 server_->Post(
"/api/v1/annotations",
209 [project_path_lambda](
const httplib::Request& req,
210 httplib::Response& res) {
213 server_->Put(R
"(/api/v1/annotations/(.+))",
214 [project_path_lambda](const httplib::Request& req,
215 httplib::Response& res) {
218 server_->Delete(R
"(/api/v1/annotations/(.+))",
219 [project_path_lambda](const httplib::Request& req,
220 httplib::Response& res) {
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
void Unpublish()
Stop advertising. Safe to call multiple times.
void Publish(int port, const std::string &rom_title="")
Start advertising. Call after the HTTP server socket is bound.
std::unique_ptr< httplib::Server > server_
BonjourPublisher bonjour_
RenderServiceSource render_source_
WindowAction window_show_
SymbolProviderSource symbol_source_
WindowAction window_hide_
absl::Status Start(int port, bool loopback_only=false)
bool editor_control_only_
bool command_execution_enabled_
ProjectPathSource project_path_source_
std::string bind_address_
std::unique_ptr< std::thread > server_thread_
std::atomic< bool > is_running_
EditorControl editor_control_
Provider for symbol (label) resolution in disassembly.
#define LOG_ERROR(category, format,...)
#define LOG_INFO(category, format,...)
void HandleStateUpdate(const httplib::Request &req, httplib::Response &res)
void ApplyCorsHeaders(httplib::Response &res)
void HandleCorsPreflight(const httplib::Request &req, httplib::Response &res)
void HandleEditorControl(const httplib::Request &req, httplib::Response &res, const std::function< absl::StatusOr< std::string >(const std::string &)> &action)
void HandleBreakpointHit(const httplib::Request &req, httplib::Response &res)
void HandleListModels(const httplib::Request &req, httplib::Response &res)
void HandleGetSymbols(const httplib::Request &req, httplib::Response &res, yaze::emu::debug::SymbolProvider *symbols)
void HandleNavigate(const httplib::Request &req, httplib::Response &res)
void HandleWindowShow(const httplib::Request &req, httplib::Response &res, const std::function< bool()> &action)
void HandleAnnotationUpdate(const httplib::Request &req, httplib::Response &res, const std::string &project_path)
void HandleRenderDungeonMetadata(const httplib::Request &req, httplib::Response &res, yaze::app::service::RenderService *render_service)
void HandleRenderDungeon(const httplib::Request &req, httplib::Response &res, yaze::app::service::RenderService *render_service)
void HandleCommandExecute(const httplib::Request &req, httplib::Response &res, yaze::Rom *rom)
void HandleAnnotationDelete(const httplib::Request &req, httplib::Response &res, const std::string &project_path)
void HandleAnnotationList(const httplib::Request &req, httplib::Response &res, const std::string &project_path)
void HandleCommandExecuteDisabled(const httplib::Request &req, httplib::Response &res)
void HandleAnnotationCreate(const httplib::Request &req, httplib::Response &res, const std::string &project_path)
void HandleCommandList(const httplib::Request &req, httplib::Response &res)
void HandleWindowHide(const httplib::Request &req, httplib::Response &res, const std::function< bool()> &action)
void HandleHealth(const httplib::Request &req, httplib::Response &res, const BonjourPublisher *bonjour)