mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-08 23:25:40 +12:00
Add new HTTP(anda) commands
This commit is contained in:
parent
8fb3096331
commit
fa6ce2a7f2
4 changed files with 31 additions and 2 deletions
|
@ -92,6 +92,7 @@ class Emulator {
|
||||||
|
|
||||||
void resume(); // Resume the emulator
|
void resume(); // Resume the emulator
|
||||||
void pause(); // Pause the emulator
|
void pause(); // Pause the emulator
|
||||||
|
void togglePause();
|
||||||
|
|
||||||
bool loadROM(const std::filesystem::path& path);
|
bool loadROM(const std::filesystem::path& path);
|
||||||
bool loadNCSD(const std::filesystem::path& path, ROMType type);
|
bool loadNCSD(const std::filesystem::path& path, ROMType type);
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
#include "helpers.hpp"
|
#include "helpers.hpp"
|
||||||
|
|
||||||
enum class HttpActionType { None, Screenshot, Key };
|
enum class HttpActionType { None, Screenshot, Key, TogglePause, Reset };
|
||||||
|
|
||||||
class Emulator;
|
class Emulator;
|
||||||
namespace httplib {
|
namespace httplib {
|
||||||
|
@ -42,6 +42,8 @@ class HttpAction {
|
||||||
|
|
||||||
static std::unique_ptr<HttpAction> createScreenshotAction(DeferredResponseWrapper& response);
|
static std::unique_ptr<HttpAction> createScreenshotAction(DeferredResponseWrapper& response);
|
||||||
static std::unique_ptr<HttpAction> createKeyAction(uint32_t key, bool state);
|
static std::unique_ptr<HttpAction> createKeyAction(uint32_t key, bool state);
|
||||||
|
static std::unique_ptr<HttpAction> createTogglePauseAction();
|
||||||
|
static std::unique_ptr<HttpAction> createResetAction();
|
||||||
};
|
};
|
||||||
|
|
||||||
struct HttpServer {
|
struct HttpServer {
|
||||||
|
|
|
@ -175,7 +175,7 @@ void Emulator::run() {
|
||||||
// Use the F4 button as a hot-key to pause or resume the emulator
|
// Use the F4 button as a hot-key to pause or resume the emulator
|
||||||
// We can't use the audio play/pause buttons because it's annoying
|
// We can't use the audio play/pause buttons because it's annoying
|
||||||
case SDLK_F4: {
|
case SDLK_F4: {
|
||||||
running ? pause() : resume();
|
togglePause();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -364,6 +364,7 @@ void Emulator::run() {
|
||||||
// Only resume if a ROM is properly loaded
|
// Only resume if a ROM is properly loaded
|
||||||
void Emulator::resume() { running = (romType != ROMType::None); }
|
void Emulator::resume() { running = (romType != ROMType::None); }
|
||||||
void Emulator::pause() { running = false; }
|
void Emulator::pause() { running = false; }
|
||||||
|
void Emulator::togglePause() { running ? pause() : resume(); }
|
||||||
|
|
||||||
void Emulator::runFrame() {
|
void Emulator::runFrame() {
|
||||||
if (running) {
|
if (running) {
|
||||||
|
|
|
@ -19,6 +19,16 @@ class HttpActionScreenshot : public HttpAction {
|
||||||
DeferredResponseWrapper& getResponse() { return response; }
|
DeferredResponseWrapper& getResponse() { return response; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class HttpActionTogglePause : public HttpAction {
|
||||||
|
public:
|
||||||
|
HttpActionTogglePause() : HttpAction(HttpActionType::TogglePause) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
class HttpActionReset : public HttpAction {
|
||||||
|
public:
|
||||||
|
HttpActionReset() : HttpAction(HttpActionType::Reset) {}
|
||||||
|
};
|
||||||
|
|
||||||
class HttpActionKey : public HttpAction {
|
class HttpActionKey : public HttpAction {
|
||||||
u32 key;
|
u32 key;
|
||||||
bool state;
|
bool state;
|
||||||
|
@ -35,6 +45,8 @@ std::unique_ptr<HttpAction> HttpAction::createScreenshotAction(DeferredResponseW
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<HttpAction> HttpAction::createKeyAction(u32 key, bool state) { return std::make_unique<HttpActionKey>(key, state); }
|
std::unique_ptr<HttpAction> HttpAction::createKeyAction(u32 key, bool state) { return std::make_unique<HttpActionKey>(key, state); }
|
||||||
|
std::unique_ptr<HttpAction> HttpAction::createTogglePauseAction() { return std::make_unique<HttpActionTogglePause>(); }
|
||||||
|
std::unique_ptr<HttpAction> HttpAction::createResetAction() { return std::make_unique<HttpActionReset>(); }
|
||||||
|
|
||||||
HttpServer::HttpServer(Emulator* emulator)
|
HttpServer::HttpServer(Emulator* emulator)
|
||||||
: emulator(emulator), server(std::make_unique<httplib::Server>()), keyMap({
|
: emulator(emulator), server(std::make_unique<httplib::Server>()), keyMap({
|
||||||
|
@ -110,6 +122,16 @@ void HttpServer::startHttpServer() {
|
||||||
|
|
||||||
server->Get("/status", [this](const httplib::Request&, httplib::Response& response) { response.set_content(status(), "text/plain"); });
|
server->Get("/status", [this](const httplib::Request&, httplib::Response& response) { response.set_content(status(), "text/plain"); });
|
||||||
|
|
||||||
|
server->Get("/togglepause", [this](const httplib::Request&, httplib::Response& response) {
|
||||||
|
pushAction(HttpAction::createTogglePauseAction());
|
||||||
|
response.set_content("ok", "text/plain");
|
||||||
|
});
|
||||||
|
|
||||||
|
server->Get("/reset", [this](const httplib::Request&, httplib::Response& response) {
|
||||||
|
pushAction(HttpAction::createResetAction());
|
||||||
|
response.set_content("ok", "text/plain");
|
||||||
|
});
|
||||||
|
|
||||||
// TODO: ability to specify host and port
|
// TODO: ability to specify host and port
|
||||||
printf("Starting HTTP server on port 1234\n");
|
printf("Starting HTTP server on port 1234\n");
|
||||||
server->listen("localhost", 1234);
|
server->listen("localhost", 1234);
|
||||||
|
@ -165,6 +187,9 @@ void HttpServer::processActions() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case HttpActionType::TogglePause: emulator->togglePause(); break;
|
||||||
|
case HttpActionType::Reset: emulator->reset(Emulator::ReloadOption::Reload); break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue