irccd  3.0.3
server_service.hpp
1 /*
2  * server_service.hpp -- server service
3  *
4  * Copyright (c) 2013-2019 David Demelier <markand@malikania.fr>
5  *
6  * Permission to use, copy, modify, and/or distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef IRCCD_DAEMON_SERVER_SERVICE_HPP
20 #define IRCCD_DAEMON_SERVER_SERVICE_HPP
21 
27 #include <irccd/sysconfig.hpp>
28 
29 #include <memory>
30 #include <string_view>
31 #include <system_error>
32 #include <vector>
33 
34 #include "server.hpp"
35 
36 namespace irccd {
37 
38 class config;
39 
40 namespace daemon {
41 
42 class bot;
43 
52 private:
53  bot& bot_;
54  std::vector<std::shared_ptr<server>> servers_;
55 
56  void handle_connect(const std::shared_ptr<server>&, const std::error_code&);
57  void handle_error(const std::shared_ptr<server>&, const std::error_code&);
58  void handle_recv(const std::shared_ptr<server>&, const std::error_code&, const event&);
59  void handle_wait(const std::shared_ptr<server>&, const std::error_code&);
60 
61  void connect(const std::shared_ptr<server>&);
62  void disconnect(const std::shared_ptr<server>&);
63  void reconnect(const std::shared_ptr<server>&);
64  void recv(const std::shared_ptr<server>&);
65 
66 public:
73 
79  auto list() const noexcept -> const std::vector<std::shared_ptr<server>>&;
80 
87  auto has(std::string_view id) const noexcept -> bool;
88 
95  void add(std::shared_ptr<server> sv);
96 
103  auto get(std::string_view id) const noexcept -> std::shared_ptr<server>;
104 
112  auto require(std::string_view id) const -> std::shared_ptr<server>;
113 
120  void disconnect(std::string_view id);
121 
125  void disconnect();
126 
134  void reconnect(std::string_view id);
135 
139  void reconnect();
140 
148  void remove(std::string_view id);
149 
155  void clear() noexcept;
156 
162  void load(const config& cfg) noexcept;
163 };
164 
165 namespace logger {
166 
167 template <typename T>
168 struct type_traits;
169 
174 template <>
182  static auto get_category(const server& server) -> std::string_view;
183 
190  static auto get_component(const server& server) -> std::string_view;
191 };
192 
193 } // !logger
194 
195 } // !daemon
196 
197 } // !irccd
198 
199 #endif // !IRCCD_DAEMON_SERVER_SERVICE_HPP
irccd::daemon::server_service::remove
void remove(std::string_view id)
irccd::daemon::logger::type_traits
Traits for loggable objects.
Definition: logger.hpp:78
irccd::daemon::server_service
Manage IRC servers.
Definition: server_service.hpp:51
irccd::config
Read .ini configuration file for irccd.
Definition: config.hpp:39
irccd::daemon::event
std::variant< std::monostate, connect_event, disconnect_event, invite_event, join_event, kick_event, me_event, message_event, mode_event, names_event, nick_event, notice_event, part_event, topic_event, whois_event > event
Store all possible events.
Definition: server.hpp:247
irccd::daemon::server_service::reconnect
void reconnect()
irccd::daemon::server_service::require
auto require(std::string_view id) const -> std::shared_ptr< server >
irccd::daemon::bot
Irccd main instance.
Definition: bot.hpp:58
irccd::daemon::server_service::disconnect
void disconnect()
irccd::daemon::server_service::add
void add(std::shared_ptr< server > sv)
irccd::daemon::server_service::clear
void clear() noexcept
irccd::daemon::server
The class that connect to a IRC server.
Definition: server.hpp:256
irccd
Parent namespace.
Definition: acceptor.hpp:43
irccd::daemon::server_service::get
auto get(std::string_view id) const noexcept -> std::shared_ptr< server >
irccd::daemon::server_service::load
void load(const config &cfg) noexcept
irccd::daemon::server_service::has
auto has(std::string_view id) const noexcept -> bool
irccd::daemon::server_service::server_service
server_service(bot &bot)
irccd::daemon::server_service::list
auto list() const noexcept -> const std::vector< std::shared_ptr< server >> &