summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/webengine.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/webengine.c')
-rw-r--r--src/emu/webengine.c105
1 files changed, 52 insertions, 53 deletions
diff --git a/src/emu/webengine.c b/src/emu/webengine.c
index 292eb6b0dfc..67cc254ac7e 100644
--- a/src/emu/webengine.c
+++ b/src/emu/webengine.c
@@ -48,18 +48,18 @@
// WEB ENGINE
//**************************************************************************
-void web_engine::websocket_ready_handler(struct mg_connection *conn) {
+void web_engine::websocket_ready_handler(struct mg_connection *conn) {
static const char *message = "update_machine";
mg_websocket_write(conn, WEBSOCKET_OPCODE_TEXT, message, strlen(message));
m_websockets.append(*global_alloc(simple_list_wrapper<mg_connection>(conn)));
-}
+}
// Arguments:
// flags: first byte of websocket frame, see websocket RFC,
// http://tools.ietf.org/html/rfc6455, section 5.2
// data, data_len: payload data. Mask, if any, is already applied.
int web_engine::websocket_data_handler(struct mg_connection *conn, int flags,
- char *data, size_t data_len)
+ char *data, size_t data_len)
{
// just Echo example for now
if ((flags & 0x0f) == WEBSOCKET_OPCODE_TEXT)
@@ -68,15 +68,15 @@ int web_engine::websocket_data_handler(struct mg_connection *conn, int flags,
// Returning zero means stoping websocket conversation.
// Close the conversation if client has sent us "exit" string.
return memcmp(data, "exit", 4);
-}
+}
static void get_qsvar(const struct mg_request_info *request_info,
- const char *name, char *dst, size_t dst_len) {
- const char *qs = request_info->query_string;
- mg_get_var(qs, strlen(qs == NULL ? "" : qs), name, dst, dst_len);
+ const char *name, char *dst, size_t dst_len) {
+ const char *qs = request_info->query_string;
+ mg_get_var(qs, strlen(qs == NULL ? "" : qs), name, dst, dst_len);
}
-int web_engine::json_game_handler(struct mg_connection *conn)
+int web_engine::json_game_handler(struct mg_connection *conn)
{
Json::Value data;
data["name"] = m_machine->system().name;
@@ -103,12 +103,12 @@ int web_engine::json_game_handler(struct mg_connection *conn)
return 1;
}
-int web_engine::json_slider_handler(struct mg_connection *conn)
+int web_engine::json_slider_handler(struct mg_connection *conn)
{
const slider_state *curslider;
astring tempstring;
Json::Value array(Json::arrayValue);
-
+
/* add all sliders */
for (curslider = ui_get_slider_list(); curslider != NULL; curslider = curslider->next)
{
@@ -151,29 +151,29 @@ int web_engine::json_slider_handler(struct mg_connection *conn)
}
// This function will be called by mongoose on every new request.
-int web_engine::begin_request_handler(struct mg_connection *conn)
+int web_engine::begin_request_handler(struct mg_connection *conn)
{
const struct mg_request_info *request_info = mg_get_request_info(conn);
- if (!strncmp(request_info->uri, "/json/",6))
+ if (!strncmp(request_info->uri, "/json/",6))
{
- if (!strcmp(request_info->uri, "/json/game"))
+ if (!strcmp(request_info->uri, "/json/game"))
{
return json_game_handler(conn);
- }
- if (!strcmp(request_info->uri, "/json/slider"))
+ }
+ if (!strcmp(request_info->uri, "/json/slider"))
{
return json_slider_handler(conn);
- }
+ }
}
- else if (!strncmp(request_info->uri, "/cmd",4))
+ else if (!strncmp(request_info->uri, "/cmd",4))
{
char cmd_name[64];
get_qsvar(request_info, "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();
@@ -181,8 +181,8 @@ int web_engine::begin_request_handler(struct mg_connection *conn)
else if(!strcmp(cmd_name,"exit"))
{
m_machine->schedule_exit();
- }
-
+ }
+
// Send HTTP reply to the client
mg_printf(conn,
"HTTP/1.1 200 OK\r\n"
@@ -195,7 +195,7 @@ int web_engine::begin_request_handler(struct mg_connection *conn)
// the client, and mongoose should not send client any more data.
return 1;
}
- else if (!strncmp(request_info->uri, "/slider",7))
+ else if (!strncmp(request_info->uri, "/slider",7))
{
char cmd_id[64];
char cmd_val[64];
@@ -206,17 +206,17 @@ int web_engine::begin_request_handler(struct mg_connection *conn)
const slider_state *curslider;
for (curslider = ui_get_slider_list(); curslider != NULL; curslider = curslider->next)
{
- if (cnt==id)
+ 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)
+ 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"
@@ -229,7 +229,7 @@ int web_engine::begin_request_handler(struct mg_connection *conn)
// the client, and mongoose should not send client any more data.
return 1;
}
- else if (!strncmp(request_info->uri, "/screenshot.png",15))
+ else if (!strncmp(request_info->uri, "/screenshot.png",15))
{
screen_device_iterator iter(m_machine->root_device());
screen_device *screen = iter.first();
@@ -251,25 +251,25 @@ int web_engine::begin_request_handler(struct mg_connection *conn)
m_machine->video().save_snapshot(screen, file);
astring fullpath(file.fullpath());
file.close();
-
+
mg_send_file(conn,fullpath);
return 1;
}
return 0;
-}
+}
-void *web_engine::websocket_keepalive()
+void *web_engine::websocket_keepalive()
{
- while(!m_exiting_core)
+ while(!m_exiting_core)
{
- osd_ticks_t curtime = osd_ticks();
+ osd_ticks_t curtime = osd_ticks();
if ((curtime - m_lastupdatetime) > osd_ticks_per_second() * 5)
{
m_lastupdatetime = curtime;
for (simple_list_wrapper<mg_connection> *curitem = m_websockets.first(); curitem != NULL; curitem = curitem->next())
{
- int status = mg_websocket_write(curitem->object(), WEBSOCKET_OPCODE_PING, NULL, 0);
+ int status = mg_websocket_write(curitem->object(), WEBSOCKET_OPCODE_PING, NULL, 0);
if (status==0) m_websockets.detach(*curitem); // remove inactive clients
}
}
@@ -284,26 +284,26 @@ void *web_engine::websocket_keepalive()
static void websocket_ready_handler_static(struct mg_connection *conn)
{
const struct mg_request_info *request_info = mg_get_request_info(conn);
- web_engine *engine = static_cast<web_engine *>(request_info->user_data);
+ web_engine *engine = static_cast<web_engine *>(request_info->user_data);
engine->websocket_ready_handler(conn);
}
static int websocket_data_handler_static(struct mg_connection *conn, int flags,
- char *data, size_t data_len)
+ char *data, size_t data_len)
{
const struct mg_request_info *request_info = mg_get_request_info(conn);
- web_engine *engine = static_cast<web_engine *>(request_info->user_data);
+ web_engine *engine = static_cast<web_engine *>(request_info->user_data);
return engine->websocket_data_handler(conn, flags, data, data_len);
}
-static int begin_request_handler_static(struct mg_connection *conn)
+static int begin_request_handler_static(struct mg_connection *conn)
{
- const struct mg_request_info *request_info = mg_get_request_info(conn);
- web_engine *engine = static_cast<web_engine *>(request_info->user_data);
+ const struct mg_request_info *request_info = mg_get_request_info(conn);
+ web_engine *engine = static_cast<web_engine *>(request_info->user_data);
return engine->begin_request_handler(conn);
}
-static void *websocket_keepalive_static(void *thread_func_param)
+static void *websocket_keepalive_static(void *thread_func_param)
{
web_engine *engine = static_cast<web_engine *>(thread_func_param);
return engine->websocket_keepalive();
@@ -315,35 +315,34 @@ static void *websocket_keepalive_static(void *thread_func_param)
web_engine::web_engine(emu_options &options)
: m_options(options),
- m_machine(NULL),
- m_ctx(NULL),
- m_lastupdatetime(0),
- m_exiting_core(false)
-
+ m_machine(NULL),
+ m_ctx(NULL),
+ m_lastupdatetime(0),
+ m_exiting_core(false)
+
{
-
struct mg_callbacks callbacks;
// List of options. Last element must be NULL.
const char *web_options[] = {
- "listening_ports", options.http_port(),
+ "listening_ports", options.http_port(),
"document_root", options.http_path(),
NULL
};
- // Prepare callbacks structure.
+ // Prepare callbacks structure.
memset(&callbacks, 0, sizeof(callbacks));
callbacks.begin_request = begin_request_handler_static;
- callbacks.websocket_ready = websocket_ready_handler_static;
- callbacks.websocket_data = websocket_data_handler_static;
+ callbacks.websocket_ready = websocket_ready_handler_static;
+ callbacks.websocket_data = websocket_data_handler_static;
// Start the web server.
if (m_options.http()) {
m_ctx = mg_start(&callbacks, this, web_options);
-
+
mg_start_thread(websocket_keepalive_static, this);
}
-
+
}
//-------------------------------------------------
@@ -368,7 +367,7 @@ void web_engine::close()
{
mg_websocket_write(curitem->object(), WEBSOCKET_OPCODE_CONNECTION_CLOSE, NULL, 0);
}
- // Stop the server.
+ // Stop the server.
mg_stop(m_ctx);
}
@@ -376,7 +375,7 @@ void web_engine::close()
void web_engine::push_message(const char *message)
{
for (simple_list_wrapper<mg_connection> *curitem = m_websockets.first(); curitem != NULL; curitem = curitem->next())
- {
+ {
int status = mg_websocket_write(curitem->object(), WEBSOCKET_OPCODE_TEXT, message, strlen(message));
if (status==0) m_websockets.detach(*curitem); // remove inactive clients
}