When sending RoomMessages, exclude the id's for any avatar's that may be ignoring the sender

This commit is contained in:
apathy
2016-07-07 02:00:05 -07:00
parent a377a48ecb
commit 8be5eafe41
3 changed files with 14 additions and 10 deletions

View File

@@ -64,7 +64,6 @@ void ChatRoom::EnterRoom(ChatAvatar* avatar, const std::u16string& password) {
}
avatars_.push_back(avatar);
avatarIds_.push_back(avatar->GetAvatarId());
avatar->JoinRoom(this);
}
@@ -85,14 +84,18 @@ void ChatRoom::LeaveRoom(ChatAvatar* avatar) {
if (avatarsIter != std::end(avatars_)) {
avatars_.erase(avatarsIter);
}
}
auto avatarsIdIter = std::remove_if(std::begin(avatarIds_), std::end(avatarIds_), [avatar](auto avatarId) {
return avatar->GetAvatarId() == avatarId;
});
std::vector<uint32_t> ChatRoom::GetAvatarIds(const ChatAvatar * srcAvatar) const {
std::vector<uint32_t> avatarIds;
if (avatarsIdIter != std::end(avatarIds_)) {
avatarIds_.erase(avatarsIdIter);
for (auto roomAvatar : avatars_) {
if (roomAvatar->IsIgnored(srcAvatar)) {
avatarIds.push_back(roomAvatar->GetAvatarId());
}
}
return std::vector<uint32_t>();
}
std::vector<std::u16string> ChatRoom::GetConnectedAddresses() const {

View File

@@ -51,8 +51,10 @@ public:
uint32_t GetCreateTime() const { return createTime_; }
uint32_t GetNodeLevel() const { return nodeLevel_; }
const std::vector<ChatAvatar*> GetAvatars() const { return avatars_; }
std::vector<uint32_t> GetAvatarIds() const { return avatarIds_; }
const std::vector<ChatAvatar*> GetAvatars() const { return avatars_; }
/** Returns a list of id's in the room that are not ignoring the srcAvatar.
*/
std::vector<uint32_t> GetAvatarIds(const ChatAvatar* srcAvatar) const;
const std::vector<const ChatAvatar*> GetAdminstrators() const { return administrators_; }
const std::vector<const ChatAvatar*> GetModerators() const { return moderators_; }
const std::vector<const ChatAvatar*> GetTempModerators() const { return tempModerators_; }
@@ -107,7 +109,6 @@ private:
int32_t dbId_ = -1;
std::vector<ChatAvatar*> avatars_;
std::vector<uint32_t> avatarIds_;
std::vector<const ChatAvatar*> administrators_;
std::vector<const ChatAvatar*> moderators_;
std::vector<const ChatAvatar*> tempModerators_;

View File

@@ -210,7 +210,7 @@ void GatewayClient::SendRoomMessageUpdate(const ChatAvatar* srcAvatar, const Cha
uint32_t messageId, const std::u16string& message, const std::u16string& oob) {
auto connectedAddresses = room->GetConnectedAddresses();
for (auto& address : connectedAddresses) {
node_->SendTo(address, MRoomMessage{srcAvatar, room->GetRoomId(), room->GetAvatarIds(),
node_->SendTo(address, MRoomMessage{srcAvatar, room->GetRoomId(), room->GetAvatarIds(srcAvatar),
message, oob, messageId});
}
}