Mercurial > irccd
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