xnoircd/nameable.cpp

71 lines
2.0 KiB
C++

#include "nameable.h"
Nameable::Nameable(IRCServer* server) {
this->server = server;
}
Nameable::~Nameable() {
this->associates.clear();
this->associates.shrink_to_fit();
}
std::string Nameable::get_addressable_name() {
return this->addressable_name;
}
bool Nameable::set_addressable_name(std::string name) {
if (this->server->is_addressable_name_free(name)) {
this->addressable_name = name;
server->register_addressable_name(name, this);
return true;
} else {
return false;
}
}
bool Nameable::has_addressable_name() {
return (this->addressable_name!="");
}
void Nameable::remove_addressable_name(std::string name) {
server->remove_addressable_name(name);
}
bool Nameable::rename(std::string name) {
if (server->is_addressable_name_free(name)) {
server->remove_addressable_name(name);
server->register_addressable_name(name, this);
this->addressable_name = name;
return true;
} else {
return false;
}
}
std::vector<Nameable*> Nameable::get_associates() {
return this->associates;
}
void Nameable::add_associate(Nameable* associate) {
std::cout << "Adding: " << associate->get_addressable_name() << "\n";
this->associates.push_back(associate);
}
bool Nameable::has_associate(Nameable* associate) {
return !(std::find(associates.begin(), associates.end(), associate) == associates.end());
}
void Nameable::remove_associate(Nameable* associate) {
auto index = std::find(this->associates.begin(), this->associates.end(), associate);
if (index != this->associates.end()) {
this->associates.erase(index);
}
}
std::string Nameable::associates_as_string() {
std::string associate_list;
for (Nameable* associate : associates) {
associate_list += associate->get_addressable_name() + " ";
}
return associate_list;
}
void Nameable::send_direct(std::vector<IRCCommand> messages) {}
void Nameable::send_relay(std::vector<IRCCommand> messages) {
for (Nameable* associate : this->associates) {
associate->send_direct(messages);
}
}
NameableType Nameable::what_are_you() {return NT_None;}