diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/debug/debugcpu.c | 2 | ||||
-rw-r--r-- | src/emu/emuopts.c | 4 | ||||
-rw-r--r-- | src/emu/emuopts.h | 10 | ||||
-rw-r--r-- | src/emu/luaengine.c | 5 | ||||
-rw-r--r-- | src/emu/machine.c | 2 | ||||
-rw-r--r-- | src/emu/mame.c | 6 | ||||
-rw-r--r-- | src/emu/mame.h | 4 | ||||
-rw-r--r-- | src/emu/ui/ui.c | 1 | ||||
-rw-r--r-- | src/emu/webengine.c | 545 | ||||
-rw-r--r-- | src/emu/webengine.h | 48 |
10 files changed, 2 insertions, 625 deletions
diff --git a/src/emu/debug/debugcpu.c b/src/emu/debug/debugcpu.c index 22344cb2deb..37d451ca0fb 100644 --- a/src/emu/debug/debugcpu.c +++ b/src/emu/debug/debugcpu.c @@ -1931,8 +1931,6 @@ void device_debug::instruction_hook(offs_t curpc) // flush any pending updates before waiting again machine.debug_view().flush_osd_updates(); - machine.manager().web()->serve(); - // clear the memory modified flag and wait global->memory_modified = false; if (machine.debug_flags & DEBUG_FLAG_OSD_ENABLED) diff --git a/src/emu/emuopts.c b/src/emu/emuopts.c index a163a7ae65d..1e578068b77 100644 --- a/src/emu/emuopts.c +++ b/src/emu/emuopts.c @@ -185,10 +185,6 @@ const options_entry emu_options::s_option_entries[] = { OPTION_AUTOBOOT_COMMAND ";ab", NULL, OPTION_STRING, "command to execute after machine boot" }, { OPTION_AUTOBOOT_DELAY, "2", OPTION_INTEGER, "timer delay in sec to trigger command execution on autoboot" }, { OPTION_AUTOBOOT_SCRIPT ";script", NULL, OPTION_STRING, "lua script to execute after machine boot" }, - { OPTION_HTTP, "0", OPTION_BOOLEAN, "enable local http server" }, - { OPTION_HTTP_PORT, "8080", OPTION_STRING, "http server listener port" }, - { OPTION_HTTP_PATH, "web", OPTION_STRING, "path to web files" }, - { OPTION_CONSOLE, "0", OPTION_BOOLEAN, "enable emulator LUA console" }, { NULL } }; diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h index d59ecd10a0a..9e8485bde29 100644 --- a/src/emu/emuopts.h +++ b/src/emu/emuopts.h @@ -189,11 +189,6 @@ enum #define OPTION_AUTOBOOT_DELAY "autoboot_delay" #define OPTION_AUTOBOOT_SCRIPT "autoboot_script" -#define OPTION_HTTP "http" -#define OPTION_HTTP_PORT "http_port" -#define OPTION_HTTP_PATH "http_path" -#define OPTION_CONSOLE "console" - //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -366,11 +361,6 @@ public: int autoboot_delay() const { return int_value(OPTION_AUTOBOOT_DELAY); } const char *autoboot_script() const { return value(OPTION_AUTOBOOT_SCRIPT); } - bool http() const { return bool_value(OPTION_HTTP); } - const char *http_port() const { return value(OPTION_HTTP_PORT); } - const char *http_path() const { return value(OPTION_HTTP_PATH); } - bool console() const { return bool_value(OPTION_CONSOLE); } - // FIXME: Couriersud: This should be in image_device_exit void remove_device_options(); diff --git a/src/emu/luaengine.c b/src/emu/luaengine.c index b5c9764fb77..6013ac6dc62 100644 --- a/src/emu/luaengine.c +++ b/src/emu/luaengine.c @@ -17,7 +17,6 @@ #include "osdepend.h" #include "drivenum.h" #include "ui/ui.h" -#include "mongoose/mongoose.h" //************************************************************************** // LUA ENGINE @@ -862,13 +861,14 @@ void lua_engine::serve_lua() } while (1); } +/* static void *serve_lua(void *param) { lua_engine *engine = (lua_engine *)param; engine->serve_lua(); return NULL; } - +*/ //------------------------------------------------- // lua_engine - constructor @@ -1025,7 +1025,6 @@ void lua_engine::initialize() void lua_engine::start_console() { - mg_start_thread(::serve_lua, this); } //------------------------------------------------- diff --git a/src/emu/machine.c b/src/emu/machine.c index 39529e546f0..7c24cb21455 100644 --- a/src/emu/machine.c +++ b/src/emu/machine.c @@ -393,8 +393,6 @@ int running_machine::run(bool firstrun) js_set_main_loop(this); #endif - manager().web()->serve(); - // execute CPUs if not paused if (!m_paused) m_scheduler.timeslice(); diff --git a/src/emu/mame.c b/src/emu/mame.c index 526cf304015..84d726c3e2e 100644 --- a/src/emu/mame.c +++ b/src/emu/mame.c @@ -117,7 +117,6 @@ machine_manager* machine_manager::instance() machine_manager::machine_manager(emu_options &options,osd_interface &osd) : m_osd(osd), m_options(options), - m_web(options), m_new_driver_pending(NULL), m_machine(NULL) { @@ -155,8 +154,6 @@ void machine_manager::schedule_new_driver(const game_driver &driver) void machine_manager::update_machine() { m_lua.set_machine(m_machine); - m_web.set_machine(m_machine); - if (m_machine!=NULL) m_web.push_message("update_machine"); } /*------------------------------------------------- @@ -175,9 +172,6 @@ int machine_manager::execute() int error = MAMERR_NONE; m_lua.initialize(); - if (m_options.console()) { - m_lua.start_console(); - } while (error == MAMERR_NONE && !exit_pending) { m_new_driver_pending = NULL; diff --git a/src/emu/mame.h b/src/emu/mame.h index 03d3dae3892..7f0c2b1ed37 100644 --- a/src/emu/mame.h +++ b/src/emu/mame.h @@ -18,8 +18,6 @@ #include <time.h> -#include "webengine.h" - class osd_interface; //************************************************************************** @@ -89,7 +87,6 @@ public: osd_interface &osd() const; emu_options &options() const { return m_options; } - web_engine *web() { return &m_web; } lua_engine *lua() { return &m_lua; } running_machine *machine() { return m_machine; } @@ -105,7 +102,6 @@ private: osd_interface & m_osd; // reference to OSD system emu_options & m_options; // reference to options - web_engine m_web; lua_engine m_lua; const game_driver * m_new_driver_pending; // pointer to the next pending driver diff --git a/src/emu/ui/ui.c b/src/emu/ui/ui.c index d6dca99c255..b2c30a6acfd 100644 --- a/src/emu/ui/ui.c +++ b/src/emu/ui/ui.c @@ -374,7 +374,6 @@ void ui_manager::display_startup_screens(bool first_time, bool show_disclaimer) // loop while we have a handler while (m_handler_callback != handler_ingame && !machine().scheduled_event_pending() && !ui_menu::stack_has_special_main_menu()) { - machine().manager().web()->serve(); machine().video().frame_update(); } diff --git a/src/emu/webengine.c b/src/emu/webengine.c deleted file mode 100644 index ad6d1928a7e..00000000000 --- a/src/emu/webengine.c +++ /dev/null @@ -1,545 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic -/*************************************************************************** - - webengine.c - - Handle MAME internal web server. - -***************************************************************************/ - -#include "mongoose/mongoose.h" -#include "jsoncpp/include/json/json.h" -#include "emu.h" -#include "emuopts.h" -#include "ui/ui.h" -#include "webengine.h" -#include "lua.hpp" - -#include "osdepend.h" - -//************************************************************************** -// WEB ENGINE -//************************************************************************** - -char* websanitize_statefilename ( char* unsanitized ) -{ - // It's important that we remove any dangerous characters from any filename - // we receive from a web client. This can be a serious security hole. - // As MAME/MESS policy is lowercase filenames, also lowercase it. - - char* sanitized = new char[64]; - int insertpoint =0; - char charcompare; - - while (*unsanitized != 0) - { - charcompare = *unsanitized; - // ASCII 48-57 are 0-9 - // ASCII 97-122 are lowercase A-Z - - if ((charcompare >= 48 && charcompare <= 57) || (charcompare >= 97 && charcompare <= 122)) - { - sanitized[insertpoint] = charcompare; - insertpoint++; - sanitized[insertpoint] = '\0'; // Make sure we're null-terminated. - } - // ASCII 65-90 are uppercase A-Z. These need to be lowercased. - if (charcompare >= 65 && charcompare <= 90) - { - sanitized[insertpoint] = tolower(charcompare); // Lowercase it - insertpoint++; - sanitized[insertpoint] = '\0'; // Make sure we're null-terminated. - } - unsanitized++; - } - return (sanitized); -} - -int web_engine::json_game_handler(struct mg_connection *conn) -{ - Json::Value data; - data["name"] = m_machine->system().name; - data["description"] = m_machine->system().description; - data["year"] = m_machine->system().year; - data["manufacturer"] = m_machine->system().manufacturer; - data["parent"] = m_machine->system().parent; - data["source_file"] = m_machine->system().source_file; - data["flags"] = m_machine->system().flags; - data["ispaused"] = m_machine->paused(); - - Json::FastWriter writer; - std::string json = writer.write(data); - // Send HTTP reply to the client - mg_printf(conn, - "HTTP/1.1 200 OK\r\n" - "Content-Type: application/json\r\n" - "Content-Length: %d\r\n" // Always set Content-Length - "\r\n" - "%s", - (int)json.length(), json.c_str()); - - // Returning non-zero tells mongoose that our function has replied to - // the client, and mongoose should not send client any more data. - - return MG_TRUE; -} - -int web_engine::json_slider_handler(struct mg_connection *conn) -{ - const slider_state *curslider; - std::string tempstring; - Json::Value array(Json::arrayValue); - - // add all sliders - for (curslider = machine().ui().get_slider_list(); curslider != NULL; curslider = curslider->next) - { - INT32 curval = (*curslider->update)(machine(), curslider->arg, &tempstring, SLIDER_NOCHANGE); - Json::Value data; - data["description"] = curslider->description; - data["minval"] = curslider->minval; - data["maxval"] = curslider->maxval; - data["defval"] = curslider->defval; - data["incval"] = curslider->incval; - data["curval"] = curval; - array.append(data); - } - - // add all sliders - for (curslider = (slider_state*)machine().osd().get_slider_list(); curslider != NULL; curslider = curslider->next) - { - INT32 curval = (*curslider->update)(machine(), curslider->arg, &tempstring, SLIDER_NOCHANGE); - Json::Value data; - data["description"] = curslider->description; - data["minval"] = curslider->minval; - data["maxval"] = curslider->maxval; - data["defval"] = curslider->defval; - data["incval"] = curslider->incval; - data["curval"] = curval; - array.append(data); - } - Json::FastWriter writer; - std::string json = writer.write(array); - // Send HTTP reply to the client - mg_printf(conn, - "HTTP/1.1 200 OK\r\n" - "Content-Type: application/json\r\n" - "Content-Length: %d\r\n" // Always set Content-Length - "\r\n" - "%s", - (int)json.length(), json.c_str()); - - return MG_TRUE; -} - -void reg_string(struct lua_State *L, const char *name, const char *val) { - lua_pushstring(L, name); - lua_pushstring(L, val); - lua_rawset(L, -3); -} - -void reg_int(struct lua_State *L, const char *name, int val) { - lua_pushstring(L, name); - lua_pushinteger(L, val); - lua_rawset(L, -3); -} - -void reg_function(struct lua_State *L, const char *name, - lua_CFunction func, struct mg_connection *conn) { - lua_pushstring(L, name); - lua_pushlightuserdata(L, conn); - lua_pushcclosure(L, func, 1); - lua_rawset(L, -3); -} - -static int lua_write(lua_State *L) { - int i, num_args; - const char *str; - size_t size; - struct mg_connection *conn = (struct mg_connection *) - lua_touserdata(L, lua_upvalueindex(1)); - - num_args = lua_gettop(L); - for (i = 1; i <= num_args; i++) { - if (lua_isstring(L, i)) { - str = lua_tolstring(L, i, &size); - mg_send_data(conn, str, size); - } - } - - return 0; -} - -static int lua_header(lua_State *L) { - struct mg_connection *conn = (struct mg_connection *) - lua_touserdata(L, lua_upvalueindex(1)); - - const char *header = luaL_checkstring(L,1); - const char *value = luaL_checkstring(L,2); - - mg_send_header(conn, header, value); - - return 0; -} - - -static void prepare_lua_environment(struct mg_connection *ri, lua_State *L) { - extern void luaL_openlibs(lua_State *); - int i; - - luaL_openlibs(L); - - if (ri == NULL) return; - - // Register mg module - lua_newtable(L); - reg_function(L, "write", lua_write, ri); - reg_function(L, "header", lua_header, ri); - - // Export request_info - lua_pushstring(L, "request_info"); - lua_newtable(L); - reg_string(L, "request_method", ri->request_method); - reg_string(L, "uri", ri->uri); - reg_string(L, "http_version", ri->http_version); - reg_string(L, "query_string", ri->query_string); - reg_string(L, "remote_ip", ri->remote_ip); - reg_int(L, "remote_port", ri->remote_port); - reg_string(L, "local_ip", ri->local_ip); - reg_int(L, "local_port", ri->local_port); - lua_pushstring(L, "content"); - lua_pushlstring(L, ri->content == NULL ? "" : ri->content, ri->content_len); - lua_rawset(L, -3); - reg_int(L, "num_headers", ri->num_headers); - lua_pushstring(L, "http_headers"); - lua_newtable(L); - for (i = 0; i < ri->num_headers; i++) { - reg_string(L, ri->http_headers[i].name, ri->http_headers[i].value); - } - lua_rawset(L, -3); - lua_rawset(L, -3); - - lua_setglobal(L, "mg"); - -} - - -static void lsp(struct mg_connection *conn, const char *p, int len, lua_State *L) { - int i, j, pos = 0; - for (i = 0; i < len; i++) { - if (p[i] == '<' && p[i + 1] == '?') { - for (j = i + 1; j < len ; j++) { - if (p[j] == '?' && p[j + 1] == '>') { - if (i-pos!=0) mg_send_data(conn, p + pos, i - pos); - if (luaL_loadbuffer(L, p + (i + 2), j - (i + 2), "") == 0) { - lua_pcall(L, 0, LUA_MULTRET, 0); - } - pos = j + 2; - i = pos - 1; - break; - } - } - } - } - if (i > pos) { - mg_send_data(conn, p + pos, i - pos); - } -} - -static int filename_endswith(const char *str, const char *suffix) -{ - if (!str || !suffix) - return 0; - size_t lenstr = strlen(str); - size_t lensuffix = strlen(suffix); - if (lensuffix > lenstr) - return 0; - return strncmp(str + lenstr - lensuffix, suffix, lensuffix) == 0; -} - -// This function will be called by mongoose on every new request. -int web_engine::begin_request_handler(struct mg_connection *conn) -{ - std::string file_path = std::string(mg_get_option(m_server, "document_root")).append(PATH_SEPARATOR).append(conn->uri); - if (filename_endswith(file_path.c_str(), ".lp")) - { - FILE *fp = NULL; - if ((fp = fopen(file_path.c_str(), "rb")) != NULL) { - fseek (fp, 0, SEEK_END); - size_t size = ftell(fp); - fseek (fp, 0, SEEK_SET); - char *data = (char*)mg_mmap(fp,size); - - lua_State *L = luaL_newstate(); - prepare_lua_environment(conn, L); - lsp(conn, data, (int) size, L); - if (L != NULL) lua_close(L); - mg_munmap(data,size); - fclose(fp); - return MG_TRUE; - } else { - return MG_FALSE; - } - } - else if (!strncmp(conn->uri, "/json/",6)) - { - if (!strcmp(conn->uri, "/json/game")) - { - return json_game_handler(conn); - } - if (!strcmp(conn->uri, "/json/slider")) - { - return json_slider_handler(conn); - } - } - else if (!strncmp(conn->uri, "/keypost",8)) - { - // Is there any sane way to determine the length of the buffer before getting it? - // A request for a way was previously filed with the mongoose devs, - // but it looks like it was never implemented. - - // For now, we'll allow a paste buffer of 32k. - // To-do: Send an error if the paste is too big? - char cmd_val[32768]; - - int pastelength = mg_get_var(conn, "val", cmd_val, sizeof(cmd_val)); - if (pastelength > 0) { - machine().ioport().natkeyboard().post_utf8(cmd_val); - } - // Send HTTP reply to the client - mg_printf(conn, - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/plain\r\n" - "Content-Length: 2\r\n" // Always set Content-Length - "\r\n" - "OK"); - - // Returning non-zero tells mongoose that our function has replied to - // the client, and mongoose should not send client any more data. - return MG_TRUE; - } - else if (!strncmp(conn->uri, "/keyupload",8)) - { - char *upload_data; - int data_length, ofs = 0; - char var_name[100], file_name[255]; - while ((ofs = mg_parse_multipart(conn->content + ofs, conn->content_len - ofs, var_name, sizeof(var_name), file_name, sizeof(file_name), (const char **)&upload_data, &data_length)) > 0) { - mg_printf_data(conn, "File: %s, size: %d bytes", file_name, data_length); - } - - // That upload_data contains more than we need. It also has the headers. - // We'll need to strip it down to just what we want. - - if ((&data_length > 0) && (sizeof(file_name) > 0)) - { - // MSVC doesn't yet support variable-length arrays, so chop the string the old-fashioned way - upload_data[data_length] = '\0'; - - // Now paste the stripped down paste_data.. - machine().ioport().natkeyboard().post_utf8(upload_data); - } - return MG_TRUE; - } - else if (!strncmp(conn->uri, "/cmd",4)) - { - char cmd_name[64]; - mg_get_var(conn, "name", cmd_name, sizeof(cmd_name)); - - if(!strcmp(cmd_name,"softreset")) - { - m_machine->schedule_soft_reset(); - } - else if(!strcmp(cmd_name,"hardreset")) - { - m_machine->schedule_hard_reset(); - } - else if(!strcmp(cmd_name,"exit")) - { - m_machine->schedule_exit(); - } - else if(!strcmp(cmd_name,"togglepause")) - { - if (m_machine->paused()) - m_machine->resume(); - else - m_machine->pause(); - } - else if(!strcmp(cmd_name,"savestate")) - { - char cmd_val[64]; - mg_get_var(conn, "val", cmd_val, sizeof(cmd_val)); - char *filename = websanitize_statefilename(cmd_val); - m_machine->schedule_save(filename); - } - else if(!strcmp(cmd_name,"loadstate")) - { - char cmd_val[64]; - mg_get_var(conn, "val", cmd_val, sizeof(cmd_val)); - char *filename = cmd_val; - m_machine->schedule_load(filename); - } - else if(!strcmp(cmd_name,"loadauto")) - { - // This is here to just load the autosave and only the autosave. - m_machine->schedule_load("auto"); - } - - // Send HTTP reply to the client - mg_printf(conn, - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/plain\r\n" - "Content-Length: 2\r\n" // Always set Content-Length - "\r\n" - "OK"); - - // Returning non-zero tells mongoose that our function has replied to - // the client, and mongoose should not send client any more data. - return MG_TRUE; - } - else if (!strncmp(conn->uri, "/slider",7)) - { - char cmd_id[64]; - char cmd_val[64]; - mg_get_var(conn, "id", cmd_id, sizeof(cmd_id)); - mg_get_var(conn, "val", cmd_val, sizeof(cmd_val)); - int cnt = 0; - int id = atoi(cmd_id); - const slider_state *curslider; - for (curslider = machine().ui().get_slider_list(); curslider != NULL; curslider = curslider->next) - { - if (cnt==id) - (*curslider->update)(machine(), curslider->arg, NULL, atoi(cmd_val)); - cnt++; - } - for (curslider = (slider_state*)machine().osd().get_slider_list(); curslider != NULL; curslider = curslider->next) - { - if (cnt==id) - (*curslider->update)(machine(), curslider->arg, NULL, atoi(cmd_val)); - cnt++; - } - - // Send HTTP reply to the client - mg_printf(conn, - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/plain\r\n" - "Content-Length: 2\r\n" // Always set Content-Length - "\r\n" - "OK"); - - // Returning non-zero tells mongoose that our function has replied to - // the client, and mongoose should not send client any more data. - return MG_TRUE; - } - else if (!strncmp(conn->uri, "/screenshot.png",15)) - { - screen_device_iterator iter(m_machine->root_device()); - screen_device *screen = iter.first(); - - if (screen == NULL) - { - return 0; - } - - std::string fname("screenshot.png"); - emu_file file(m_machine->options().snapshot_directory(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - file_error filerr = file.open(fname.c_str()); - - if (filerr != FILERR_NONE) - { - return 0; - } - - m_machine->video().save_snapshot(screen, file); - std::string fullpath(file.fullpath()); - file.close(); - mg_send_header(conn, "Cache-Control", "no-cache, no-store, must-revalidate"); - mg_send_header(conn, "Pragma", "no-cache"); - mg_send_header(conn, "Expires", "0"); - mg_send_file(conn, fullpath.c_str(), NULL); - return MG_MORE; // It is important to return MG_MORE after mg_send_file! - } - return 0; -} - -static int ev_handler(struct mg_connection *conn, enum mg_event ev) { - if (ev == MG_REQUEST) { - if (conn->is_websocket) { - // This handler is called for each incoming websocket frame, one or more - // times for connection lifetime. - // Echo websocket data back to the client. - return conn->content_len == 4 && !memcmp(conn->content, "exit", 4) ? MG_FALSE : MG_TRUE; - } else { - web_engine *engine = static_cast<web_engine *>(conn->server_param); - return engine->begin_request_handler(conn); - } - } else if (ev== MG_WS_CONNECT) { - // New websocket connection. Send connection ID back to the client. - mg_websocket_printf(conn, WEBSOCKET_OPCODE_TEXT, "update_machine"); - return MG_FALSE; - } else if (ev == MG_AUTH) { - return MG_TRUE; - } else { - return MG_FALSE; - } -} - -//------------------------------------------------- -// web_engine - constructor -//------------------------------------------------- - -web_engine::web_engine(emu_options &options) - : m_options(options), - m_machine(NULL), - m_server(NULL), - //m_lastupdatetime(0), - m_exiting_core(false), - m_http(m_options.http()) - -{ - if (m_http) { - m_server = mg_create_server(this, ev_handler); - - mg_set_option(m_server, "listening_port", options.http_port()); - mg_set_option(m_server, "document_root", options.http_path()); - } - -} - -//------------------------------------------------- -// ~web_engine - destructor -//------------------------------------------------- - -web_engine::~web_engine() -{ - if (m_http) - close(); -} - -//------------------------------------------------- -// close - close and cleanup of lua engine -//------------------------------------------------- - -void web_engine::close() -{ - m_exiting_core = 1; - // Cleanup, and free server instance - mg_destroy_server(&m_server); -} - -void web_engine::serve() -{ - if (m_http) mg_poll_server(m_server, 0); -} - -void web_engine::push_message(const char *message) -{ - struct mg_connection *c; - if (m_server!=NULL) { - // Iterate over all connections, and push current time message to websocket ones. - for (c = mg_next(m_server, NULL); c != NULL; c = mg_next(m_server, c)) { - if (c->is_websocket) { - mg_websocket_write(c, 1, message, strlen(message)); - } - } - } -} diff --git a/src/emu/webengine.h b/src/emu/webengine.h deleted file mode 100644 index 7d0a3189fc3..00000000000 --- a/src/emu/webengine.h +++ /dev/null @@ -1,48 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Miodrag Milanovic -/*************************************************************************** - - webengine.h - - Handle MAME internal web server. - -***************************************************************************/ - -#pragma once - -#ifndef __WEB_ENGINE_H__ -#define __WEB_ENGINE_H__ - -struct mg_server; // Handle for the HTTP server itself -struct mg_connection; // Handle for the individual connection - -class web_engine -{ -public: - // construction/destruction - web_engine(emu_options &options); - ~web_engine(); - - void serve(); - void push_message(const char *message); - void close(); - - void set_machine(running_machine *machine) { m_machine = machine; } - int begin_request_handler(struct mg_connection *conn); -protected: - // getters - running_machine &machine() const { return *m_machine; } - - int json_game_handler(struct mg_connection *conn); - int json_slider_handler(struct mg_connection *conn); -private: - // internal state - emu_options & m_options; - running_machine * m_machine; - struct mg_server * m_server; - //osd_ticks_t m_lastupdatetime; - bool m_exiting_core; - bool m_http; -}; - -#endif /* __web_engine_H__ */ |