added stuff for user-nick map

pull/14/head
Tom Early 6 years ago
parent 8a0e29a24e
commit f06f454d46

@ -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)
{

@ -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<std::string, std::string> RptrGate;
std::unordered_map<std::string, std::string> GateIPV4;
std::unordered_map<std::string, std::string> GateIPV6;
std::unordered_map<std::string, std::string> NameNick;
std::mutex mux;
};

Loading…
Cancel
Save

Powered by TurnKey Linux.