irccd  3.0.3
transport_service.hpp
1 /*
2  * transport_service.hpp -- transport 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_TRANSPORT_SERVICE_HPP
20 #define IRCCD_DAEMON_TRANSPORT_SERVICE_HPP
21 
27 #include <irccd/sysconfig.hpp>
28 
29 #include <memory>
30 #include <vector>
31 
32 #include <json.hpp>
33 
34 namespace irccd {
35 
36 class config;
37 
38 namespace daemon {
39 
40 class bot;
41 class transport_client;
42 class transport_command;
43 class transport_server;
44 
50 public:
54  using commands = std::vector<std::unique_ptr<transport_command>>;
55 
59  using servers = std::vector<std::shared_ptr<transport_server>>;
60 
61 private:
62  bot& bot_;
63  commands commands_;
64  servers servers_;
65 
66  void handle_command(std::shared_ptr<transport_client>, const nlohmann::json&);
67  void recv(std::shared_ptr<transport_client>);
68  void handshake(std::shared_ptr<transport_client>);
69  void accept(transport_server&);
70 
71 public:
78 
82  ~transport_service() noexcept;
83 
89  auto get_commands() const noexcept -> const commands&;
90 
96  auto get_commands() noexcept -> commands&;
97 
103  void add(std::shared_ptr<transport_server> ts);
104 
111  void broadcast(const nlohmann::json& object);
112 
118  void load(const config& cfg) noexcept;
119 };
120 
121 } // !daemon
122 
123 } // !irccd
124 
125 #endif // !IRCCD_DAEMON_TRANSPORT_SERVICE_HPP
irccd::daemon::transport_service::load
void load(const config &cfg) noexcept
irccd::config
Read .ini configuration file for irccd.
Definition: config.hpp:39
irccd::daemon::transport_service
Manage transport servers and clients.
Definition: transport_service.hpp:49
irccd::daemon::transport_service::add
void add(std::shared_ptr< transport_server > ts)
irccd::daemon::bot
Irccd main instance.
Definition: bot.hpp:58
irccd::daemon::transport_service::commands
std::vector< std::unique_ptr< transport_command > > commands
the list of transport commands.
Definition: transport_service.hpp:54
irccd::daemon::transport_server
Abstract transport server class.
Definition: transport_server.hpp:128
irccd::daemon::transport_service::servers
std::vector< std::shared_ptr< transport_server > > servers
The list of transport acceptors.
Definition: transport_service.hpp:59
irccd::daemon::transport_service::get_commands
auto get_commands() const noexcept -> const commands &
irccd
Parent namespace.
Definition: acceptor.hpp:43
std
Definition: bot.hpp:253
irccd::daemon::transport_service::transport_service
transport_service(bot &bot) noexcept
irccd::daemon::transport_service::~transport_service
~transport_service() noexcept
irccd::daemon::transport_service::broadcast
void broadcast(const nlohmann::json &object)