diff --git a/includes/server/AResource.hpp b/includes/server/AResource.hpp index 43f757e..a8150ed 100644 --- a/includes/server/AResource.hpp +++ b/includes/server/AResource.hpp @@ -6,7 +6,7 @@ /* By: mmoussou +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/05/12 17:13:39 by adjoly #+# #+# */ -/* Updated: 2025/05/12 19:06:28 by adjoly ### ########.fr */ +/* Updated: 2025/05/13 09:55:45 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #pragma once +#include #include +#include #include #include @@ -25,22 +27,45 @@ namespace server { class ResourceManager { public: - static AClientResource *get(int i) { - for (auto it = range(_res)) { - if ((**it) == i) { - return *it; - } - } - std::stringstream str; - str << "resource not found for client"; - str << i; - _log->debug(str.str()); - return not_nullptr; + /** + * @brief Can be used to get a resource correcponding to the id of the + * resource + * + * @param The id of the resource + * + * @return The resource + * @throw std::out_of_range If the resource does not exist + */ + static AClientResource *get(int id) { + auto it = std::find(_res.begin(), _res.end(), id); + + if (it != _res.end()) + return (*it); + throw std::out_of_range("resource does not exist for client D:"); } + + /** + * @brief Can be used to append a resource to the ResourceManager + * + * @param The resource to add + */ static void append(AClientResource *new_client) { _res.push_back(new_client); } + /** + * @brief Can be used to remove a resource by giving it it's id + * + * @param The id of the resource to remove + */ + static void remove(int id) { + auto it = std::find(_res.begin(), _res.end(), id); + + if (it != _res.end()) + delete (*it); + // TODO throw or not - to see + } + protected: private: static std::vector _res;