From: Carl Hetherington Date: Mon, 30 Dec 2013 23:10:49 +0000 (+0000) Subject: Handle exceptions thrown from ServerFinder. X-Git-Tag: v2.0.48~1011 X-Git-Url: https://git.carlh.net/gitweb/?a=commitdiff_plain;h=6670f11c639e3515256f4f0eb3699e02155f67c9;p=dcpomatic.git Handle exceptions thrown from ServerFinder. --- diff --git a/src/lib/server_finder.cc b/src/lib/server_finder.cc index de90e0d5c..5b67d8048 100644 --- a/src/lib/server_finder.cc +++ b/src/lib/server_finder.cc @@ -47,6 +47,7 @@ ServerFinder::ServerFinder () void ServerFinder::broadcast_thread () +try { boost::system::error_code error; boost::asio::io_service io_service; @@ -88,9 +89,14 @@ ServerFinder::broadcast_thread () dcpomatic_sleep (10); } } +catch (...) +{ + store_current (); +} void ServerFinder::listen_thread () +try { while (1) { shared_ptr sock (new Socket (10)); @@ -117,6 +123,10 @@ ServerFinder::listen_thread () } } } +catch (...) +{ + store_current (); +} bool ServerFinder::server_found (string ip) const diff --git a/src/lib/server_finder.h b/src/lib/server_finder.h index 01e26f7df..202bee8f9 100644 --- a/src/lib/server_finder.h +++ b/src/lib/server_finder.h @@ -20,7 +20,7 @@ #include #include "server.h" -class ServerFinder +class ServerFinder : public ExceptionStore { public: void connect (boost::function); diff --git a/src/tools/dcpomatic.cc b/src/tools/dcpomatic.cc index 66f795ddf..891c4623c 100644 --- a/src/tools/dcpomatic.cc +++ b/src/tools/dcpomatic.cc @@ -54,6 +54,7 @@ #include "lib/cinema.h" #include "lib/kdm.h" #include "lib/send_kdm_email_job.h" +#include "lib/server_finder.h" using std::cout; using std::string; @@ -632,8 +633,12 @@ class App : public wxApp f->Show (); ui_signaller = new wxUISignaller (this); - this->Bind (wxEVT_IDLE, boost::bind (&App::idle, this)); + Bind (wxEVT_IDLE, boost::bind (&App::idle, this)); + Bind (wxEVT_TIMER, boost::bind (&App::check, this)); + _timer.reset (new wxTimer (this)); + _timer->Start (1000); + return true; } catch (exception& e) @@ -670,6 +675,17 @@ class App : public wxApp { ui_signaller->ui_idle (); } + + void check () + { + try { + ServerFinder::instance()->rethrow (); + } catch (exception& e) { + error_dialog (0, std_to_wx (e.what ())); + } + } + + shared_ptr _timer; }; IMPLEMENT_APP (App)