diff --git a/CacheManager.cpp b/CacheManager.cpp index e7d5725..95c4d2d 100644 --- a/CacheManager.cpp +++ b/CacheManager.cpp @@ -73,6 +73,19 @@ std::string CCacheManager::findGateAddress(const std::string &gate) return addr; } +std::string CCacheManager::findNameNick(const std::string &name) +{ + std::string nick; + if (name.empty()) + return nick; + mux.unlock(); + auto itn = NameNick.find(name); + if (itn != NameNick.end()) + nick.assign(itn->second); + mux.unlock(); + return nick; +} + void CCacheManager::updateUser(const std::string &user, const std::string &rptr, const std::string &gate, const std::string &addr, const std::string &time) { if (user.empty()) @@ -140,6 +153,38 @@ void CCacheManager::updateGate(const std::string &G, const std::string &addr) mux.unlock(); } +void CCacheManager::updateName(const std::string &name, const std::string &nick) +{ + if (name.empty() || nick.empty()) + return; + mux.lock(); + NameNick[name] = nick; + mux.unlock(); +} + +void CCacheManager::eraseGate(const std::string &gate) +{ + mux.lock(); + GateIPV4.erase(gate); + GateIPV6.erase(gate); + mux.unlock(); +} + +void CCacheManager::eraseName(const std::string &name) +{ + mux.lock(); + NameNick.erase(name); + mux.unlock(); +} + +void CCacheManager::clearGate() +{ + mux.lock(); + GateIPV4.clear(); + GateIPV6.clear(); + mux.unlock(); +} + // these last three functions are private and not mux locked. std::string CCacheManager::findUserRptr(const std::string &user) { diff --git a/CacheManager.h b/CacheManager.h index 3842173..760edad 100644 --- a/CacheManager.h +++ b/CacheManager.h @@ -27,18 +27,23 @@ public: CCacheManager() {} ~CCacheManager() {} - // the bodies of these public functions need to be mux locked to access the maps and the private functions. + // the bodies of these public functions are mux locked to access the maps and the private functions. // for these find functions, if a map value can't be found the returned string will be empty. void findUserData(const std::string &user, std::string &rptr, std::string &gate, std::string &addr); void findRptrData(const std::string &rptr, std::string &gate, std::string &addr); std::string findUserTime(const std::string &user); std::string findUserAddr(const std::string &user); + std::string findNameNick(const std::string &name); std::string findUserRepeater(const std::string &user); std::string findGateAddress(const std::string &gate); + void eraseGate(const std::string &gate); + void eraseName(const std::string &name); + void clearGate(); void updateUser(const std::string &user, const std::string &rptr, const std::string &gate, const std::string &addr, const std::string &time); void updateRptr(const std::string &rptr, const std::string &gate, const std::string &addr); void updateGate(const std::string &gate, const std::string &addr); + void updateName(const std::string &name, const std::string &nick); private: // these three functions aren't mux locked, that's why they're private @@ -51,5 +56,6 @@ private: std::unordered_map RptrGate; std::unordered_map GateIPV4; std::unordered_map GateIPV6; + std::unordered_map NameNick; std::mutex mux; };