changeset 243:d395aeef63eb

Irccd: get rid of ServerCache
author David Demelier <markand@malikania.fr>
date Wed, 17 Aug 2016 18:12:34 +0200
parents d7f02d0e7166
children f71fa7d19ceb
files lib/irccd/server-state-connected.cpp lib/irccd/server-state-disconnected.cpp lib/irccd/server.cpp lib/irccd/server.hpp
diffstat 4 files changed, 24 insertions(+), 47 deletions(-) [+]
line wrap: on
line diff
--- a/lib/irccd/server-state-connected.cpp	Wed Aug 17 18:00:25 2016 +0200
+++ b/lib/irccd/server-state-connected.cpp	Wed Aug 17 18:12:34 2016 +0200
@@ -36,9 +36,9 @@
             log::warning("server {}: retrying in {} seconds"_format(server.name(), server.reconnectDelay()));
 
         server.next(std::make_unique<DisconnectedState>());
-    } else if (server.cache().pingTimer.elapsed() >= server.pingTimeout() * 1000) {
+    } else if (server.m_timer.elapsed() >= server.m_pingTimeout * 1000) {
         log::warning() << "server " << server.name() << ": ping timeout after "
-                   << (server.cache().pingTimer.elapsed() / 1000) << " seconds" << std::endl;
+                   << (server.m_timer.elapsed() / 1000) << " seconds" << std::endl;
         server.next(std::make_unique<DisconnectedState>());
     } else
         irc_add_select_descriptors(server.session(), &setinput, &setoutput, reinterpret_cast<int *>(&maxfd));
--- a/lib/irccd/server-state-disconnected.cpp	Wed Aug 17 18:00:25 2016 +0200
+++ b/lib/irccd/server-state-disconnected.cpp	Wed Aug 17 18:12:34 2016 +0200
@@ -25,19 +25,17 @@
 
 void Server::DisconnectedState::prepare(Server &server, fd_set &, fd_set &, net::Handle &)
 {
-    auto &cache = server.cache();
-
     if (server.reconnectTries() == 0) {
         log::warning() << "server " << server.name() << ": reconnection disabled, skipping" << std::endl;
         server.onDie();
-    } else if (server.reconnectTries() > 0 && cache.reconnectCurrent > server.reconnectTries()) {
+    } else if (server.reconnectTries() > 0 && server.m_recocur > server.reconnectTries()) {
         log::warning() << "server " << server.name() << ": giving up" << std::endl;
         server.onDie();
     } else {
         if (m_timer.elapsed() > static_cast<unsigned>(server.reconnectDelay() * 1000)) {
             irc_disconnect(server.session());
 
-            server.cache().reconnectCurrent ++;
+            server.m_recocur ++;
             server.next(std::make_unique<ConnectingState>());
         }
     }
--- a/lib/irccd/server.cpp	Wed Aug 17 18:00:25 2016 +0200
+++ b/lib/irccd/server.cpp	Wed Aug 17 18:12:34 2016 +0200
@@ -120,10 +120,10 @@
 void Server::handleConnect(const char *, const char **) noexcept
 {
     // Reset the number of tried reconnection.
-    m_cache.reconnectCurrent = 0;
+    m_recocur = 1;
 
     // Reset the timer.
-    m_cache.pingTimer.reset();
+    m_timer.reset();
 
     // Reset joined channels.
     m_jchannels.clear();
@@ -235,7 +235,7 @@
 
         // The listing may add some prefixes, remove them if needed.
         for (std::string u : users)
-            m_cache.namesMap[params[2]].insert(cleanPrefix(m_modes, u));
+            m_namesMap[params[2]].insert(cleanPrefix(m_modes, u));
     } else if (event == LIBIRC_RFC_RPL_ENDOFNAMES) {
         /*
          * Called when end of name listing has finished on a channel.
@@ -247,12 +247,12 @@
         if (c < 3 || params[1] == nullptr)
             return;
 
-        auto it = m_cache.namesMap.find(params[1]);
-        if (it != m_cache.namesMap.end()) {
+        auto it = m_namesMap.find(params[1]);
+        if (it != m_namesMap.end()) {
             onNames(NamesEvent{shared_from_this(), params[1], std::vector<std::string>(it->second.begin(), it->second.end())});
 
             // Don't forget to remove the list.
-            m_cache.namesMap.erase(it);
+            m_namesMap.erase(it);
         }
     } else if (event == LIBIRC_RFC_RPL_WHOISUSER) {
         /*
@@ -275,7 +275,7 @@
         info.host = strify(params[3]);
         info.realname = strify(params[5]);
 
-        m_cache.whoisMap.emplace(info.nick, info);
+        m_whoisMap.emplace(info.nick, info);
     } else if (event == LIBIRC_RFC_RPL_WHOISCHANNELS) {
         /*
          * Called when we have received channels for one user.
@@ -287,8 +287,8 @@
         if (c < 3 || !params[1] || !params[2])
             return;
 
-        auto it = m_cache.whoisMap.find(params[1]);
-        if (it != m_cache.whoisMap.end()) {
+        auto it = m_whoisMap.find(params[1]);
+        if (it != m_whoisMap.end()) {
             std::vector<std::string> channels = util::split(params[2], " \t");
 
             // Clean their prefixes.
@@ -305,12 +305,12 @@
          * params[1] == nickname
          * params[2] == End of WHOIS list
          */
-        auto it = m_cache.whoisMap.find(params[1]);
-        if (it != m_cache.whoisMap.end()) {
+        auto it = m_whoisMap.find(params[1]);
+        if (it != m_whoisMap.end()) {
             onWhois(WhoisEvent{shared_from_this(), it->second});
 
             // Don't forget to remove.
-            m_cache.whoisMap.erase(it);
+            m_whoisMap.erase(it);
         }
     } else if (event == /* RPL_BOUNCE */ 5) {
         /*
@@ -337,7 +337,7 @@
 void Server::handlePing(const char *, const char **params) noexcept
 {
     // Reset the timer to detect disconnection.
-    m_cache.pingTimer.reset();
+    m_timer.reset();
 
     // Don't forget to respond.
     send("PONG {}"_format(params[0]));
--- a/lib/irccd/server.hpp	Wed Aug 17 18:00:25 2016 +0200
+++ b/lib/irccd/server.hpp	Wed Aug 17 18:12:34 2016 +0200
@@ -83,18 +83,7 @@
  */
 class Cache {
 public:
-    ElapsedTimer pingTimer;                         //!< Track elapsed time for ping timeout.
-    std::int8_t reconnectCurrent{1};                //!< Number of reconnection already tested.
 
-    /**
-     * Map of names being build by channels.
-     */
-    std::map<std::string, std::set<std::string>> namesMap;
-
-    /**
-     * Map of whois being build by nicknames.
-     */
-    std::map<std::string, Whois> whoisMap;
 };
 
 /**
@@ -439,9 +428,6 @@
     class ConnectingState;
     class DisconnectedState;
 
-    // Misc.
-    std::map<ChannelMode, char> m_modes;
-
     // Requested and joined channels.
     std::vector<Channel> m_rchannels;
     std::vector<std::string> m_jchannels;
@@ -467,9 +453,6 @@
     std::uint16_t m_reconnectDelay{30};
     std::uint16_t m_pingTimeout{300};
 
-    // TODO: find another way.
-    Cache m_cache;
-
     // Queue of requests to send.
     std::queue<std::function<bool ()>> m_queue;
 
@@ -480,6 +463,13 @@
     std::unique_ptr<State> m_state;
     std::unique_ptr<State> m_stateNext;
 
+    // Misc.
+    ElapsedTimer m_timer;
+    std::map<ChannelMode, char> m_modes;
+    std::int8_t m_recocur{0};
+    std::map<std::string, std::set<std::string>> m_namesMap;
+    std::map<std::string, Whois> m_whoisMap;
+
     // Private helpers.
     void removeJoinedChannel(const std::string &channel);
 
@@ -802,17 +792,6 @@
     }
 
     /**
-     * Access the cache.
-     *
-     * \return the cache
-     * \warning use with care
-     */
-    inline Cache &cache() noexcept
-    {
-        return m_cache;
-    }
-
-    /**
      * Get the private session.
      *
      * \return the session