mirror of
https://github.com/SWG-Source/stationapi.git
synced 2026-01-16 23:04:18 -05:00
When sending RoomMessages, exclude the id's for any avatar's that may be ignoring the sender
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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_;
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user