diff --git a/Channel/Channel.cpp b/Channel/Channel.cpp index 8a9912f..0603b5f 100644 --- a/Channel/Channel.cpp +++ b/Channel/Channel.cpp @@ -44,6 +44,9 @@ Channel& Channel::operator=(const Channel &other) Channel::Channel(std::string name) : name_(name) { /* std::cout << "Channel with name constructor called" << std::endl; */ } +// Getters +std::string Channel::getName() const { return (this->name); } + // Members void Channel::addMember(int fd) { this->members_.insert(fd); } void Channel::removeMember(int fd) { this->members_.erase(fd); } @@ -53,3 +56,14 @@ bool Channel::hasMember(int fd) const { return (this->members_.count(fd) > 0); void Channel::addOperator(int fd) { this->operators_.insert(fd); } void Channel::removeOperator(int fd) { this->operators_.erase(fd); } bool Channel::hasOperator(int fd) const { return (this->operators_.count(fd) > 0); } + +void Channel::broadcast(const std::string &msg, const std::map& clients_, int excludeFd) +{ + for(std::set::iterator it = members_.begin(); it != members_.end(); it++) + { + if (*it == excludeFd) continue; + std::map::const_iterator user = clients_.find(*it); + if (user != client_.end()) + user->second.send(msg); + } +} \ No newline at end of file diff --git a/Channel/Channel.hpp b/Channel/Channel.hpp index 2fd1618..a62aea5 100644 --- a/Channel/Channel.hpp +++ b/Channel/Channel.hpp @@ -16,13 +16,16 @@ # include # include +# include + +# include "../User/User.hpp" class Channel { private: std::string name_; - std::set members_; - std::set operators_; + std::set members_; + std::set operators_; public: Channel(); @@ -31,15 +34,22 @@ class Channel Channel& operator=(const Channel &other); ~Channel(); + + // Getters + std::string getName() const { return (this->name); } + + // Users - void addMember(int fd); - void removeMember(int fd); - bool hasMember(int fd) const; - + void addMember(int fd); + void removeMember(int fd); + bool hasMember(int fd) const; + // Operators - void addOperator(int fd); - void removeOperator(int fd); - bool hasOperator(int fd) const; + void addOperator(int fd); + void removeOperator(int fd); + bool hasOperator(int fd) const; + + void broadcast(const std::string &msg, const std::map& clients_, int excludeFd); }; diff --git a/Server/Server.hpp b/Server/Server.hpp index 63de580..b2a5ab8 100644 --- a/Server/Server.hpp +++ b/Server/Server.hpp @@ -6,7 +6,7 @@ /* By: aortigos # include +# include # include "../User/User.hpp" +# include "../Channel/Channel.hpp" # define SERVER_NAME "irc.server" @@ -40,8 +42,9 @@ class Server std::string password_; - std::vector sockets_; - std::map clients_; + std::vector sockets_; + std::map clients_; + std::map channels_; std::map commands_; diff --git a/User/User.hpp b/User/User.hpp index 8000528..73dedc6 100644 --- a/User/User.hpp +++ b/User/User.hpp @@ -15,17 +15,18 @@ # define USER_HPP # include +# include class User { private: - int fd; - std::string nick; - std::string username; - std::string realname; - std::string buffer; - bool authenticated; - bool registered; + int fd; + std::string nick; + std::string username; + std::string realname; + std::string buffer; + bool authenticated; + bool registered; public: User(); @@ -34,29 +35,29 @@ class User User& operator=(const User &other); ~User(); - void send(const std::string &msg); + void send(const std::string &msg); // Getters - int getFd() const; - std::string getNick() const; - std::string getUsername() const; - std::string getRealname() const; - std::string &getBuffer(); - bool isAuthenticated() const; - bool isRegistered() const; + int getFd() const; + std::string getNick() const; + std::string getUsername() const; + std::string getRealname() const; + std::string &getBuffer(); + bool isAuthenticated() const; + bool isRegistered() const; // Setters - void setNick(std::string nick); - void setUsername(std::string username); - void setRealname(std::string realname); - void appendBuffer(std::string buff); - void clearBuffer(); + void setNick(std::string nick); + void setUsername(std::string username); + void setRealname(std::string realname); + void appendBuffer(std::string buff); + void clearBuffer(); - void setAuthenticated(bool value); - void setRegistered(bool value); + void setAuthenticated(bool value); + void setRegistered(bool value); }; #endif diff --git a/cmds/join.cpp b/cmds/join.cpp new file mode 100644 index 0000000..079a5fa --- /dev/null +++ b/cmds/join.cpp @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* join.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: aortigos