]> git.sesse.net Git - casparcg/commitdiff
2.0.2: Console no longer closable. Close cleanup did not work well enough.
authorronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 4 Dec 2011 23:03:21 +0000 (23:03 +0000)
committerronag <ronag@362d55ac-95cf-4e76-9f9a-cbaa9c17b72d>
Sun, 4 Dec 2011 23:03:21 +0000 (23:03 +0000)
git-svn-id: https://casparcg.svn.sourceforge.net/svnroot/casparcg/server/branches/2.0.2@1787 362d55ac-95cf-4e76-9f9a-cbaa9c17b72d

shell/main.cpp

index 07453de8c1e454177ee0ee750bb5c34015567058..c4d3014d894e823b35fd9872fdfb1344b93bf072 100644 (file)
 \r
 #include <algorithm>\r
 \r
-struct application_state\r
-{\r
-       enum type\r
-       {\r
-               running,\r
-               shutdown,\r
-               pause_and_shutdown\r
-       };\r
-};\r
-\r
-boost::condition_variable      shutdown_cond;\r
-boost::mutex                           shutdown_mut;\r
-tbb::atomic<int>                       shutdown_event;\r
-\r
 // NOTE: This is needed in order to make CComObject work since this is not a real ATL project.\r
 CComModule _AtlModule;\r
 extern __declspec(selectany) CAtlModule* _pAtlModule = &_AtlModule;\r
@@ -95,27 +81,14 @@ void change_icon( const HICON hNewIcon )
    ::FreeLibrary(hMod);\r
 }\r
 \r
-BOOL WINAPI HandlerRoutine(__in  DWORD dwCtrlType)\r
-{\r
-       switch(dwCtrlType)\r
-       {\r
-       case CTRL_CLOSE_EVENT:\r
-       case CTRL_SHUTDOWN_EVENT:\r
-               shutdown_event = application_state::shutdown;\r
-               shutdown_cond.notify_all();\r
-               return true;\r
-       }\r
-       return false;\r
-}\r
-\r
 void setup_console_window()\r
 {       \r
        auto hOut = GetStdHandle(STD_OUTPUT_HANDLE);\r
 \r
        // Disable close button in console to avoid shutdown without cleanup.\r
-       //EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED);\r
-       //DrawMenuBar(GetConsoleWindow());\r
-       SetConsoleCtrlHandler(HandlerRoutine, true);\r
+       EnableMenuItem(GetSystemMenu(GetConsoleWindow(), FALSE), SC_CLOSE , MF_GRAYED);\r
+       DrawMenuBar(GetConsoleWindow());\r
+       //SetConsoleCtrlHandler(HandlerRoutine, true);\r
 \r
        // Configure console size and position.\r
        auto coord = GetLargestConsoleWindowSize(hOut);\r
@@ -238,30 +211,30 @@ int main(int argc, wchar_t* argv[])
        \r
        try \r
        {\r
-               {\r
-                       // Configure environment properties from configuration.\r
-                       caspar::env::configure("casparcg.config");\r
+               // Configure environment properties from configuration.\r
+               caspar::env::configure("casparcg.config");\r
                                \r
-               #ifdef _DEBUG\r
-                       if(caspar::env::properties().get("configuration.debugging.remote", false))\r
-                               MessageBox(nullptr, TEXT("Now is the time to connect for remote debugging..."), TEXT("Debug"), MB_OK | MB_TOPMOST);\r
-               #endif   \r
-\r
-                       // Start logging to file.\r
-                       caspar::log::add_file_sink(caspar::env::log_folder());                  \r
-                       std::wcout << L"Logging [info] or higher severity to " << caspar::env::log_folder() << std::endl << std::endl;\r
+       #ifdef _DEBUG\r
+               if(caspar::env::properties().get("configuration.debugging.remote", false))\r
+                       MessageBox(nullptr, TEXT("Now is the time to connect for remote debugging..."), TEXT("Debug"), MB_OK | MB_TOPMOST);\r
+       #endif   \r
+\r
+               // Start logging to file.\r
+               caspar::log::add_file_sink(caspar::env::log_folder());                  \r
+               std::wcout << L"Logging [info] or higher severity to " << caspar::env::log_folder() << std::endl << std::endl;\r
                \r
-                       // Setup console window.\r
-                       setup_console_window();\r
+               // Setup console window.\r
+               setup_console_window();\r
 \r
-                       // Print environment information.\r
-                       print_info();\r
+               // Print environment information.\r
+               print_info();\r
                        \r
-                       std::stringstream str;\r
-                       boost::property_tree::xml_writer_settings<char> w(' ', 3);\r
-                       boost::property_tree::write_xml(str, caspar::env::properties(), w);\r
-                       CASPAR_LOG(info) << L"casparcg.config:\n-----------------------------------------\n" << str.str().c_str() << L"-----------------------------------------";\r
+               std::stringstream str;\r
+               boost::property_tree::xml_writer_settings<char> w(' ', 3);\r
+               boost::property_tree::write_xml(str, caspar::env::properties(), w);\r
+               CASPAR_LOG(info) << L"casparcg.config:\n-----------------------------------------\n" << str.str().c_str() << L"-----------------------------------------";\r
                                \r
+               {\r
                        // Create server object which initializes channels, protocols and controllers.\r
                        caspar::server caspar_server;\r
                                \r
@@ -271,89 +244,69 @@ int main(int argc, wchar_t* argv[])
                        // Create a dummy client which prints amcp responses to console.\r
                        auto console_client = std::make_shared<caspar::IO::ConsoleClientInfo>();\r
 \r
-                       boost::thread input_thread([&]\r
+                       std::wstring wcmd;\r
+                       while(true)\r
                        {\r
-                               while(shutdown_event == application_state::running)\r
+                               std::getline(std::wcin, wcmd); // TODO: It's blocking...\r
+\r
+                               if(wcmd == L"exit" || wcmd == L"q")\r
+                                       break;\r
+\r
+                               // This is just dummy code for testing.\r
+                               if(wcmd.substr(0, 1) == L"1")\r
+                                       wcmd = L"LOADBG 1-1 " + wcmd.substr(1, wcmd.length()-1) + L" SLIDE 100 LOOP \r\nPLAY 1-1";\r
+                               else if(wcmd.substr(0, 1) == L"2")\r
+                                       wcmd = L"MIXER 1-0 VIDEO IS_KEY 1";\r
+                               else if(wcmd.substr(0, 1) == L"3")\r
+                                       wcmd = L"CG 1-2 ADD 1 BBTELEFONARE 1";\r
+                               else if(wcmd.substr(0, 1) == L"4")\r
+                                       wcmd = L"PLAY 1-1 DV FILTER yadif=1:-1 LOOP";\r
+                               else if(wcmd.substr(0, 1) == L"5")\r
                                {\r
-                                       std::wstring wcmd;\r
-                                       std::getline(std::wcin, wcmd); // TODO: It's blocking...\r
-\r
+                                       auto file = wcmd.substr(2, wcmd.length()-1);\r
+                                       wcmd = L"PLAY 1-1 " + file + L" LOOP\r\n" \r
+                                                       L"PLAY 1-2 " + file + L" LOOP\r\n" \r
+                                                       L"PLAY 1-3 " + file + L" LOOP\r\n"\r
+                                                       L"PLAY 2-1 " + file + L" LOOP\r\n" \r
+                                                       L"PLAY 2-2 " + file + L" LOOP\r\n" \r
+                                                       L"PLAY 2-3 " + file + L" LOOP\r\n";\r
+                               }\r
+                               else if(wcmd.substr(0, 1) == L"X")\r
+                               {\r
+                                       int num = 0;\r
+                                       std::wstring file;\r
                                        try\r
                                        {\r
-                                               if(wcmd == L"exit" || wcmd == L"q")\r
-                                               {\r
-                                                       shutdown_event = application_state::pause_and_shutdown;\r
-                                                       shutdown_cond.notify_all();\r
-                                                       return;\r
-                                               }\r
-\r
-                                               // This is just dummy code for testing.\r
-                                               if(wcmd.substr(0, 1) == L"1")\r
-                                                       wcmd = L"LOADBG 1-1 " + wcmd.substr(1, wcmd.length()-1) + L" SLIDE 100 LOOP \r\nPLAY 1-1";\r
-                                               else if(wcmd.substr(0, 1) == L"2")\r
-                                                       wcmd = L"MIXER 1-0 VIDEO IS_KEY 1";\r
-                                               else if(wcmd.substr(0, 1) == L"3")\r
-                                                       wcmd = L"CG 1-2 ADD 1 BBTELEFONARE 1";\r
-                                               else if(wcmd.substr(0, 1) == L"4")\r
-                                                       wcmd = L"PLAY 1-1 DV FILTER yadif=1:-1 LOOP";\r
-                                               else if(wcmd.substr(0, 1) == L"5")\r
-                                               {\r
-                                                       auto file = wcmd.substr(2, wcmd.length()-1);\r
-                                                       wcmd = L"PLAY 1-1 " + file + L" LOOP\r\n" \r
-                                                                  L"PLAY 1-2 " + file + L" LOOP\r\n" \r
-                                                                  L"PLAY 1-3 " + file + L" LOOP\r\n"\r
-                                                                  L"PLAY 2-1 " + file + L" LOOP\r\n" \r
-                                                                  L"PLAY 2-2 " + file + L" LOOP\r\n" \r
-                                                                  L"PLAY 2-3 " + file + L" LOOP\r\n";\r
-                                               }\r
-                                               else if(wcmd.substr(0, 1) == L"X")\r
-                                               {\r
-                                                       int num = 0;\r
-                                                       std::wstring file;\r
-                                                       try\r
-                                                       {\r
-                                                               num = boost::lexical_cast<int>(wcmd.substr(1, 2));\r
-                                                               file = wcmd.substr(4, wcmd.length()-1);\r
-                                                       }\r
-                                                       catch(...)\r
-                                                       {\r
-                                                               num = boost::lexical_cast<int>(wcmd.substr(1, 1));\r
-                                                               file = wcmd.substr(3, wcmd.length()-1);\r
-                                                       }\r
-\r
-                                                       int n = 0;\r
-                                                       int num2 = num;\r
-                                                       while(num2 > 0)\r
-                                                       {\r
-                                                               num2 >>= 1;\r
-                                                               n++;\r
-                                                       }\r
-\r
-                                                       wcmd = L"MIXER 1 GRID " + boost::lexical_cast<std::wstring>(n);\r
-\r
-                                                       for(int i = 1; i <= num; ++i)\r
-                                                               wcmd += L"\r\nPLAY 1-" + boost::lexical_cast<std::wstring>(i) + L" " + file + L" LOOP";// + L" SLIDE 100 LOOP";\r
-                                               }\r
-\r
-                                               wcmd += L"\r\n";\r
-                                               amcp.Parse(wcmd.c_str(), wcmd.length(), console_client);\r
+                                               num = boost::lexical_cast<int>(wcmd.substr(1, 2));\r
+                                               file = wcmd.substr(4, wcmd.length()-1);\r
                                        }\r
                                        catch(...)\r
                                        {\r
-                                               CASPAR_LOG_CURRENT_EXCEPTION();\r
+                                               num = boost::lexical_cast<int>(wcmd.substr(1, 1));\r
+                                               file = wcmd.substr(3, wcmd.length()-1);\r
                                        }\r
-                               }\r
-                       });\r
 \r
-                       boost::unique_lock<boost::mutex> lock(shutdown_mut);\r
-                       while(shutdown_event == application_state::running)                     \r
-                               shutdown_cond.wait(lock);                               \r
-               }       \r
-                       \r
-               Sleep(500); // CAPSAR_LOG is asynchronous. Try to get text in correct order.'\r
+                                       int n = 0;\r
+                                       int num2 = num;\r
+                                       while(num2 > 0)\r
+                                       {\r
+                                               num2 >>= 1;\r
+                                               n++;\r
+                                       }\r
+\r
+                                       wcmd = L"MIXER 1 GRID " + boost::lexical_cast<std::wstring>(n);\r
+\r
+                                       for(int i = 1; i <= num; ++i)\r
+                                               wcmd += L"\r\nPLAY 1-" + boost::lexical_cast<std::wstring>(i) + L" " + file + L" LOOP";// + L" SLIDE 100 LOOP";\r
+                               }\r
 \r
-               if(shutdown_event == application_state::pause_and_shutdown)\r
-                       system("pause");        \r
+                               wcmd += L"\r\n";\r
+                               amcp.Parse(wcmd.c_str(), wcmd.length(), console_client);\r
+                       }       \r
+               }\r
+               Sleep(500);\r
+               CASPAR_LOG(info) << "Successfully shutdown CasparCG Server.";\r
+               system("pause");        \r
        }\r
        catch(boost::property_tree::file_parser_error&)\r
        {\r
@@ -372,6 +325,5 @@ int main(int argc, wchar_t* argv[])
                CASPAR_LOG(fatal) << L"Unhandled exception in main thread. Please report this error on the CasparCG forums (www.casparcg.com/forum).";\r
        }       \r
        \r
-       CASPAR_LOG(info) << "Successfully shutdown CasparCG Server.";\r
        return 0;\r
 }
\ No newline at end of file