diff --git a/src/ChatAvatar.cpp b/src/ChatAvatar.cpp index adb4cc4..4da889a 100644 --- a/src/ChatAvatar.cpp +++ b/src/ChatAvatar.cpp @@ -89,19 +89,3 @@ bool ChatAvatar::IsIgnored(const ChatAvatar* avatar) { return false; } - -std::vector ChatAvatar::GetJoinedRooms() { - return rooms_; -} - -void ChatAvatar::JoinRoom(ChatRoom * room) { - rooms_.push_back(room); -} - -void ChatAvatar::UnjoinRoom(ChatRoom * room) { - if (rooms_.empty()) return; - - rooms_.erase(std::remove_if(std::begin(rooms_), std::end(rooms_), [room](const auto joinedRoom) { - return room->GetRoomId() == joinedRoom->GetRoomId(); - })); -} diff --git a/src/ChatAvatar.hpp b/src/ChatAvatar.hpp index 7e6db70..06a2f17 100644 --- a/src/ChatAvatar.hpp +++ b/src/ChatAvatar.hpp @@ -75,10 +75,6 @@ public: const std::vector GetIgnoreList() const { return ignoreList_; } - std::vector GetJoinedRooms(); - void JoinRoom(ChatRoom* room); - void UnjoinRoom(ChatRoom* room); - private: friend class ChatAvatarService; diff --git a/src/ChatRoom.cpp b/src/ChatRoom.cpp index 0129fae..0fdca5d 100644 --- a/src/ChatRoom.cpp +++ b/src/ChatRoom.cpp @@ -64,7 +64,6 @@ void ChatRoom::EnterRoom(ChatAvatar* avatar, const std::u16string& password) { } avatars_.push_back(avatar); - avatar->JoinRoom(this); } bool ChatRoom::IsInRoom(ChatAvatar* avatar) const { return IsInRoom(avatar->GetAvatarId()); } @@ -76,8 +75,6 @@ bool ChatRoom::IsInRoom(uint32_t avatarId) const { } void ChatRoom::LeaveRoom(ChatAvatar* avatar) { - avatar->UnjoinRoom(this); - auto avatarsIter = std::remove_if(std::begin(avatars_), std::end(avatars_), [avatar](auto roomAvatar) { return roomAvatar->GetAvatarId() == avatar->GetAvatarId(); }); diff --git a/src/ChatRoomService.cpp b/src/ChatRoomService.cpp index 2787ed6..ef43632 100644 --- a/src/ChatRoomService.cpp +++ b/src/ChatRoomService.cpp @@ -208,6 +208,18 @@ ChatRoom* ChatRoomService::GetRoom(const std::u16string& roomAddress) { return room; } +std::vector ChatRoomService::GetJoinedRooms(const ChatAvatar * avatar) { + std::vector rooms; + + for (auto& room : rooms_) { + if (room->IsInRoom(avatar->GetAvatarId())) { + rooms.push_back(room.get()); + } + } + + return rooms; +} + void ChatRoomService::DeleteRoom(ChatRoom* room) { sqlite3_stmt* stmt; char sql[] = "DELETE FROM room WHERE id = @id"; diff --git a/src/ChatRoomService.hpp b/src/ChatRoomService.hpp index dfd1cf1..e5afa46 100644 --- a/src/ChatRoomService.hpp +++ b/src/ChatRoomService.hpp @@ -37,6 +37,8 @@ public: bool RoomExists(const std::u16string& roomAddress) const; ChatRoom* GetRoom(const std::u16string& roomAddress); + std::vector GetJoinedRooms(const ChatAvatar* avatar); + private: friend class ChatRoom; void DeleteRoom(ChatRoom* room); diff --git a/src/protocol/Protocol.cpp b/src/protocol/Protocol.cpp index f6bc469..0593761 100644 --- a/src/protocol/Protocol.cpp +++ b/src/protocol/Protocol.cpp @@ -196,7 +196,7 @@ DestroyAvatar::DestroyAvatar( } // Remove From All Rooms - for (auto room : avatar->GetJoinedRooms()) { + for (auto room : roomService_->GetJoinedRooms(avatar)) { auto addresses = room->GetConnectedAddresses(); room->LeaveRoom(avatar); @@ -287,7 +287,7 @@ FailoverReLoginAvatar::FailoverReLoginAvatar( client->SendFriendLoginUpdates(avatar); } - for (auto room : avatar->GetJoinedRooms()) { + for (auto room : roomService_->GetJoinedRooms(avatar)) { client->SendEnterRoomUpdate(avatar, room); } } @@ -462,7 +462,7 @@ LogoutAvatar::LogoutAvatar(GatewayClient* client, const RequestType& request, Re auto avatar = avatarService_->GetAvatar(request.avatarId); - for (auto room : avatar->GetJoinedRooms()) { + for (auto room : roomService_->GetJoinedRooms(avatar)) { auto addresses = room->GetConnectedAddresses(); room->LeaveRoom(avatar);