/* * Copyright (c) 2023 Fancy Code. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef TCP_SERVER_HANDLE_H #define TCP_SERVER_HANDLE_H #include "ITcpServer.h" #include #include class TcpServerHandle { public: /** * @brief Default constructor */ TcpServerHandle() = default; /** * @brief Default destructor */ ~TcpServerHandle() = default; /** * @brief Get the singleton instance of TcpServerHandle * @param impl Optional implementation pointer to replace the current instance * @return The singleton instance of TcpServerHandle */ static std::shared_ptr &GetInstance(std::shared_ptr *impl = nullptr); /** * @brief Add a server * @param fd File descriptor of the server * @param server Shared pointer to the ITcpServer instance */ void AddServer(const int &fd, const std::shared_ptr &server); /** * @brief Get a server by file descriptor * @param fd File descriptor of the server * @param server Reference to a shared pointer to store the ITcpServer instance * @return True if the server is found, false otherwise */ bool GetServer(const int &fd, std::shared_ptr &server); private: /// Store multiple servers std::map> mFd; }; #endif