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.