- while (1) {
- string const data = DCPOMATIC_HELLO;
- socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
- dcpomatic_sleep (10);
+ string const data = DCPOMATIC_HELLO;
+
+ while (!_stop) {
+ if (Config::instance()->use_any_servers ()) {
+ /* Broadcast to look for servers */
+ try {
+ boost::asio::ip::udp::endpoint end_point (boost::asio::ip::address_v4::broadcast(), Config::instance()->server_port_base() + 1);
+ socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
+ } catch (...) {
+
+ }
+ }
+
+ /* Query our `definite' servers (if there are any) */
+ vector<string> servers = Config::instance()->servers ();
+ for (vector<string>::const_iterator i = servers.begin(); i != servers.end(); ++i) {
+ if (server_found (*i)) {
+ /* Don't bother asking a server that we already know about */
+ continue;
+ }
+ try {
+ boost::asio::ip::udp::resolver resolver (io_service);
+ boost::asio::ip::udp::resolver::query query (*i, raw_convert<string> (Config::instance()->server_port_base() + 1));
+ boost::asio::ip::udp::endpoint end_point (*resolver.resolve (query));
+ socket.send_to (boost::asio::buffer (data.c_str(), data.size() + 1), end_point);
+ } catch (...) {
+
+ }
+ }
+
+ boost::mutex::scoped_lock lm (_search_condition_mutex);
+ _search_condition.timed_wait (lm, boost::get_system_time() + boost::posix_time::seconds (10));