static long msgProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { MprThread *tp; char buf[ME_MAX_FNAME]; switch (msg) { case WM_DESTROY: case WM_QUIT: mprShutdown(0, -1, 0); break; case APPWEB_MONITOR_MESSAGE: return monitorEvent(hwnd, wp, lp); case WM_COMMAND: switch (LOWORD(wp)) { case MA_MENU_STATUS: break; case MA_MENU_DOC: runBrowser("http://embedthis.com/appweb/doc/index.html"); break; #if UNUSED case MA_MENU_MANAGE: runBrowser("/index.html"); break; #endif case MA_MENU_START: tp = mprCreateThread("startService", startService, 0, 0); mprStartThread(tp); break; case MA_MENU_STOP: tp = mprCreateThread("stopService", stopService, 0, 0); mprStartThread(tp); break; case MA_MENU_ABOUT: /* Single-threaded users beware. This blocks !! */ fmt(buf, sizeof(buf), "%s %s", ME_TITLE, ME_VERSION); MessageBoxEx(hwnd, buf, mprGetAppTitle(), MB_OK, 0); break; case MA_MENU_EXIT: PostMessage(hwnd, WM_QUIT, 0, 0L); break; default: return (long) DefWindowProc(hwnd, msg, wp, lp); } break; default: return (long) DefWindowProc(hwnd, msg, wp, lp); } return 0; }
static void finishThread(MprThread *tp) { if (tp) { mprLock(app->mutex); if (--app->activeLoadThreads <= 0) { mprShutdown(MPR_EXIT_NORMAL, 0, 0); } mprUnlock(app->mutex); } }
/* Exit the application static function exit(status: Number, how: String = "immediate"): void TODO - status is not implemented */ static EjsObj *app_exit(Ejs *ejs, EjsObj *unused, int argc, EjsObj **argv) { MprTicks timeout; cchar *how; int status, mode; if (ejs->dontExit) { ejsThrowStateError(ejs, "App.exit has been disabled"); return 0; } status = argc >= 1 ? ejsGetInt(ejs, argv[0]) : 0; timeout = argc >= 2 ? ejsGetInt(ejs, argv[1]) : 0; how = ejsToMulti(ejs, argc >= 2 ? ejsToString(ejs, argv[1]): ESV(empty)); if (scmp(how, "normal") == 0) { mode = 0; } else if (scmp(how, "abort") == 0) { mode = MPR_EXIT_ABORT; } else if (scmp(how, "safe") == 0) { mode = MPR_EXIT_SAFE; } else if (scmp(how, "restart") == 0) { mode = MPR_EXIT_RESTART; #if DEPRECATED || 1 } else if (scmp(how, "immediate") == 0) { mode = 0; } else if (scmp(how, "graceful") == 0) { mode = 0; if (argc <= 2) { timeout = 30 * 3000; } } else if (scmp(how, "default") == 0) { mode = 0; #endif } else { mode = 0; } mprShutdown(mode, status, timeout); ejsAttention(ejs); return 0; }