trunk/src/emu/webengine.c
| r31985 | r31986 | |
| 287 | 287 | } |
| 288 | 288 | } |
| 289 | 289 | |
| 290 | | static int iterate_callback(struct mg_connection *c, enum mg_event ev) { |
| 291 | | if (ev == MG_POLL && c->is_websocket) { |
| 292 | | char buf[20]; |
| 293 | | int len = snprintf(buf, sizeof(buf), "%lu", |
| 294 | | (unsigned long) * (time_t *) c->callback_param); |
| 295 | | mg_websocket_write(c, 1, buf, len); |
| 296 | | } |
| 297 | | return MG_TRUE; |
| 298 | | } |
| 299 | | |
| 300 | | static void *serve(void *server) { |
| 301 | | time_t current_timer = 0, last_timer = time(NULL); |
| 302 | | for (;;) mg_poll_server((struct mg_server *) server, 1000); |
| 303 | | current_timer = time(NULL); |
| 304 | | if (current_timer - last_timer > 0) { |
| 305 | | last_timer = current_timer; |
| 306 | | mg_iterate_over_connections((struct mg_server *)server, iterate_callback, ¤t_timer); |
| 307 | | } |
| 308 | | return NULL; |
| 309 | | } |
| 310 | | |
| 311 | 290 | //------------------------------------------------- |
| 312 | 291 | // web_engine - constructor |
| 313 | 292 | //------------------------------------------------- |
| r31985 | r31986 | |
| 325 | 304 | |
| 326 | 305 | mg_set_option(m_server, "listening_port", options.http_port()); |
| 327 | 306 | mg_set_option(m_server, "document_root", options.http_path()); |
| 328 | | |
| 329 | | mg_start_thread(serve, m_server); |
| 330 | 307 | } |
| 331 | 308 | |
| 332 | 309 | } |
| r31985 | r31986 | |
| 352 | 329 | mg_destroy_server(&m_server); |
| 353 | 330 | } |
| 354 | 331 | |
| 332 | void web_engine::serve() |
| 333 | { |
| 334 | if (m_options.http()) mg_poll_server(m_server, 0); |
| 335 | } |
| 336 | |
| 355 | 337 | static int websocket_callback(struct mg_connection *c, enum mg_event ev) { |
| 356 | 338 | if (c->is_websocket) { |
| 357 | 339 | const char *message = (const char *)c->callback_param; |