Mercurial > irccd
changeset 242:d7f02d0e7166
Irccd: make states internal in Server
author | David Demelier <markand@malikania.fr> |
---|---|
date | Wed, 17 Aug 2016 18:00:25 +0200 |
parents | d46111dcc510 |
children | d395aeef63eb |
files | lib/irccd/server-state-connected.cpp lib/irccd/server-state-connected.hpp lib/irccd/server-state-connecting.cpp lib/irccd/server-state-connecting.hpp lib/irccd/server-state-disconnected.cpp lib/irccd/server-state-disconnected.hpp lib/irccd/server-state.hpp lib/irccd/server.cpp lib/irccd/server.hpp |
diffstat | 9 files changed, 29 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/irccd/server-state-connected.cpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-connected.cpp Wed Aug 17 18:00:25 2016 +0200 @@ -27,7 +27,7 @@ namespace irccd { -void ConnectedState::prepare(Server &server, fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) +void Server::ConnectedState::prepare(Server &server, fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) { if (!irc_is_connected(server.session())) { log::warning() << "server " << server.name() << ": disconnected" << std::endl; @@ -44,7 +44,7 @@ irc_add_select_descriptors(server.session(), &setinput, &setoutput, reinterpret_cast<int *>(&maxfd)); } -std::string ConnectedState::ident() const +std::string Server::ConnectedState::ident() const { return "Connected"; }
--- a/lib/irccd/server-state-connected.hpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-connected.hpp Wed Aug 17 18:00:25 2016 +0200 @@ -32,7 +32,7 @@ * \brief Connected state. * \ingroup states */ -class ConnectedState : public State { +class Server::ConnectedState : public State { public: /** * \copydoc State::prepare
--- a/lib/irccd/server-state-connecting.cpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-connecting.cpp Wed Aug 17 18:00:25 2016 +0200 @@ -69,7 +69,7 @@ } // !namespace -void ConnectingState::prepare(Server &server, fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) +void Server::ConnectingState::prepare(Server &server, fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) { /* * The connect function will either fail if the hostname wasn't resolved or if any of the internal functions @@ -120,7 +120,7 @@ } } -std::string ConnectingState::ident() const +std::string Server::ConnectingState::ident() const { return "Connecting"; }
--- a/lib/irccd/server-state-connecting.hpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-connecting.hpp Wed Aug 17 18:00:25 2016 +0200 @@ -33,7 +33,7 @@ * \brief Connecting state. * \ingroup states */ -class ConnectingState : public State { +class Server::ConnectingState : public State { private: bool m_started{false}; ElapsedTimer m_timer;
--- a/lib/irccd/server-state-disconnected.cpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-disconnected.cpp Wed Aug 17 18:00:25 2016 +0200 @@ -23,7 +23,7 @@ namespace irccd { -void DisconnectedState::prepare(Server &server, fd_set &, fd_set &, net::Handle &) +void Server::DisconnectedState::prepare(Server &server, fd_set &, fd_set &, net::Handle &) { auto &cache = server.cache(); @@ -43,7 +43,7 @@ } } -std::string DisconnectedState::ident() const +std::string Server::DisconnectedState::ident() const { return "Disconnected"; }
--- a/lib/irccd/server-state-disconnected.hpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state-disconnected.hpp Wed Aug 17 18:00:25 2016 +0200 @@ -33,7 +33,7 @@ * \brief Disconnected state. * \ingroup states */ -class DisconnectedState : public State { +class Server::DisconnectedState : public Server::State { private: ElapsedTimer m_timer;
--- a/lib/irccd/server-state.hpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server-state.hpp Wed Aug 17 18:00:25 2016 +0200 @@ -32,15 +32,14 @@ #include "elapsed-timer.hpp" #include "net.hpp" #include "sysconfig.hpp" +#include "server.hpp" namespace irccd { -class Server; - /** * \brief Server current state. */ -class State { +class Server::State { public: /** * Default constructor.
--- a/lib/irccd/server.cpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server.cpp Wed Aug 17 18:00:25 2016 +0200 @@ -487,6 +487,11 @@ irc_set_ctcp_version(*m_session, ctcpversion.c_str()); } +void Server::next(std::unique_ptr<State> state) noexcept +{ + m_stateNext = std::move(state); +} + void Server::update() noexcept { if (m_stateNext) { @@ -514,6 +519,11 @@ next(std::make_unique<ConnectingState>()); } +void Server::prepare(fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) noexcept +{ + m_state->prepare(*this, setinput, setoutput, maxfd); +} + void Server::sync(fd_set &setinput, fd_set &setoutput) { /*
--- a/lib/irccd/server.hpp Wed Aug 17 17:20:06 2016 +0200 +++ b/lib/irccd/server.hpp Wed Aug 17 18:00:25 2016 +0200 @@ -38,7 +38,7 @@ #include <json.hpp> #include "elapsed-timer.hpp" -#include "server-state.hpp" +#include "net.hpp" #include "signals.hpp" #include "sysconfig.hpp" @@ -434,6 +434,11 @@ Signal<WhoisEvent> onWhois; private: + class State; + class ConnectedState; + class ConnectingState; + class DisconnectedState; + // Misc. std::map<ChannelMode, char> m_modes; @@ -822,10 +827,7 @@ * * \param state the new state */ - inline void next(std::unique_ptr<State> state) noexcept - { - m_stateNext = std::move(state); - } + IRCCD_EXPORT void next(std::unique_ptr<State> state) noexcept; /** * Switch to next state if it has. @@ -847,10 +849,7 @@ * * \warning Not thread-safe */ - inline void prepare(fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) noexcept - { - m_state->prepare(*this, setinput, setoutput, maxfd); - } + IRCCD_EXPORT void prepare(fd_set &setinput, fd_set &setoutput, net::Handle &maxfd) noexcept; /** * Process incoming/outgoing data after selection.