Support multiple nick session, except for IQs

ref #2556
This commit is contained in:
louiz’
2016-06-08 01:42:43 +02:00
parent 507d0c2cbe
commit 2d11a5f494
8 changed files with 118 additions and 59 deletions
+5
View File
@@ -100,3 +100,8 @@ namespace std {
}
}
}
std::tuple<std::string, std::string> Iid::to_tuple() const
{
return std::make_tuple(this->get_local(), this->get_server());
}
+2
View File
@@ -60,6 +60,8 @@ public:
std::string get_sep() const;
std::tuple<std::string, std::string> to_tuple() const;
private:
void init(const std::string& iid);
+6 -9
View File
@@ -1,4 +1,5 @@
#include <irc/irc_channel.hpp>
#include <algorithm>
IrcChannel::IrcChannel():
joined(false),
@@ -36,15 +37,11 @@ IrcUser* IrcChannel::find_user(const std::string& name) const
void IrcChannel::remove_user(const IrcUser* user)
{
for (auto it = this->users.begin(); it != this->users.end(); ++it)
{
IrcUser* u = it->get();
if (u->nick == user->nick)
{
this->users.erase(it);
break ;
}
}
this->users.erase(std::remove_if(this->users.begin(), this->users.end(),
[user](const std::unique_ptr<IrcUser>& u)
{
return user->nick == u->nick;
}), this->users.end());
}
void IrcChannel::remove_all_users()
+3 -9
View File
@@ -618,9 +618,7 @@ void IrcClient::set_and_forward_user_list(const IrcMessage& message)
const IrcUser* user = channel->add_user(nick, this->prefix_to_mode);
if (user->nick != channel->get_self()->nick)
{
this->bridge.send_user_join(this->hostname, chan_name, user,
user->get_most_significant_mode(this->sorted_user_modes),
false);
this->bridge.send_user_join(this->hostname, chan_name, user, user->get_most_significant_mode(this->sorted_user_modes), false);
}
else
{
@@ -644,9 +642,7 @@ void IrcClient::on_channel_join(const IrcMessage& message)
else
{
const IrcUser* user = channel->add_user(nick, this->prefix_to_mode);
this->bridge.send_user_join(this->hostname, chan_name, user,
user->get_most_significant_mode(this->sorted_user_modes),
false);
this->bridge.send_user_join(this->hostname, chan_name, user, user->get_most_significant_mode(this->sorted_user_modes), false);
}
}
@@ -746,9 +742,7 @@ void IrcClient::on_channel_completely_joined(const IrcMessage& message)
const std::string chan_name = utils::tolower(message.arguments[1]);
IrcChannel* channel = this->get_channel(chan_name);
channel->joined = true;
this->bridge.send_user_join(this->hostname, chan_name, channel->get_self(),
channel->get_self()->get_most_significant_mode(this->sorted_user_modes),
true);
this->bridge.send_user_join(this->hostname, chan_name, channel->get_self(), channel->get_self()->get_most_significant_mode(this->sorted_user_modes), true);
this->bridge.send_topic(this->hostname, chan_name, channel->topic, channel->topic_author);
}
+2
View File
@@ -276,6 +276,8 @@ public:
const Resolver& get_resolver() const { return this->dns_resolver; }
const std::vector<char>& get_sorted_user_modes() const { return sorted_user_modes; }
private:
/**
* The hostname of the server we are connected to.