BasicColors: add `noexcept`
[ncmpc-debian.git] / src / Instance.cxx
1 /* ncmpc (Ncurses MPD Client)
2  * (c) 2004-2019 The Music Player Daemon Project
3  * Project homepage: http://musicpd.org
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19
20 #include "Instance.hxx"
21 #include "Options.hxx"
22
23 #include <signal.h>
24
25 Instance::Instance()
26         :io_service(),
27 #ifndef _WIN32
28          sigterm(io_service, SIGTERM, SIGINT, SIGHUP),
29          sigwinch(io_service, SIGWINCH, SIGCONT),
30 #endif
31          client(io_service,
32                 options.host.empty() ? nullptr : options.host.c_str(),
33                 options.port,
34                 options.timeout_ms,
35                 options.password.empty() ? nullptr : options.password.c_str()),
36          seek(io_service, client),
37          reconnect_timer(io_service),
38          update_timer(io_service),
39 #ifndef NCMPC_MINI
40          check_key_bindings_timer(io_service),
41 #endif
42          screen_manager(io_service),
43 #ifdef ENABLE_LIRC
44          lirc_input(io_service),
45 #endif
46          user_input(io_service, *screen_manager.main_window.w)
47 {
48         screen_manager.Init(&client);
49
50         sigterm.async_wait([this](const auto &, int){
51                         this->io_service.stop();
52                 });
53
54 #ifndef _WIN32
55         AsyncWaitSigwinch();
56 #endif
57 }
58
59 Instance::~Instance()
60 {
61         screen_manager.Exit();
62 }
63
64 void
65 Instance::Run()
66 {
67         screen_manager.Update(client, seek);
68
69         io_service.run();
70 }