/** SCM state change handler */ static void WINAPI win_service_handler(DWORD control) { apt_log(APT_LOG_MARK,APT_PRIO_INFO,"Service Handler %d",control); switch (control) { case SERVICE_CONTROL_INTERROGATE: break; case SERVICE_CONTROL_SHUTDOWN: case SERVICE_CONTROL_STOP: if(server) { win_service_status.dwCurrentState = SERVICE_STOP_PENDING; if(!SetServiceStatus(win_service_status_handle, &win_service_status)) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Set Service Status %d",GetLastError()); } /* shutdown server */ unimrcp_server_shutdown(server); } win_service_status.dwCurrentState = SERVICE_STOPPED; win_service_status.dwCheckPoint = 0; win_service_status.dwWaitHint = 0; break; } if(!SetServiceStatus(win_service_status_handle, &win_service_status)) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Set Service Status %d",GetLastError()); } }
apt_bool_t uni_cmdline_run(apt_dir_layout_t *dir_layout, apr_pool_t *pool) { apt_bool_t running = TRUE; char cmdline[1024]; int i; mrcp_server_t *server; /* start server */ server = unimrcp_server_start(dir_layout); if(!server) { return FALSE; } do { printf(">"); memset(&cmdline, 0, sizeof(cmdline)); for(i = 0; i < sizeof(cmdline); i++) { cmdline[i] = (char) getchar(); if(cmdline[i] == '\n') { cmdline[i] = '\0'; break; } } if(*cmdline) { running = cmdline_process(cmdline); } } while(running != 0); /* shutdown server */ unimrcp_server_shutdown(server); return TRUE; }