C++ Boost Asio удаление хранилища Sesion-соединение в векторе на сервере ⇐ C++
C++ Boost Asio удаление хранилища Sesion-соединение в векторе на сервере
У меня две совмещенные проблемы
[*]Я не знаю, как завершить работу функции чтения, если она не получила никаких данных, прервать соединение и уведомить сервер. [*]При удалении сеанса класса из вектора m_storageSession, расположенного на сервере классов, после завершения получения данных std::vector m_StorageSession;
void Server::startAcceptNewConnectionAsync() { m_Acceptor.async_accept( [это](boost::system::error_code aError_code, boost::asio::ip::tcp::socket aSocket) { если (!aError_code) { boost::asio::ip::tcp::endpoint endpoint = aSocket.remote_endpoint(); std::shared_ptr newSession = std::make_shared (это, m_SessionID.GetFreeID(), endpoint.address().to_string(), endpoint.port(), std::move(aSocket)); newSession->start(); m_StorageSession.push_back(newSession); } startAcceptNewConnectionAsync(); }); } void Server::notificationAbautCloseConnectionSession(const size_t& theIdSession) { for (int i = 0; i getIdSession() == theIdSession) { m_SessionID.DeleteSession(m_StorageSession->getIdSession()); m_StorageSession->закрыть(); перерыв; } } } Сессия::~Сессия() { если (m_Owner) { m_Owner-> notificationAbautCloseConnectionSession (m_IdSession); // Сервер*m_Владелец } } void Session::do_read() { автоматически себя (shared_from_this()); m_Socket.async_read_some(boost::asio::buffer(m_FrameCommunicationDataIn.getBuforData() + m_FrameCommunicationDataIn.getIndexSaveDataInBuffor(), m_FrameCommunicationDataIn.getSizeBufforData()), [this, self](boost::system::error_code ec, std::size_t length) { если (!ec) { если (длина!= 0) { m_FrameCommunicationDataIn.setAmauntCopyDataIn(длина); новыеДанныеИзСессии(); } еще { это->~Сессия(); } do_read(); } }); } Я хочу, чтобы сеанс уведомил сервер о том, что он завершил получение данных и сервер удалил их из вектора.
У меня две совмещенные проблемы
[*]Я не знаю, как завершить работу функции чтения, если она не получила никаких данных, прервать соединение и уведомить сервер. [*]При удалении сеанса класса из вектора m_storageSession, расположенного на сервере классов, после завершения получения данных std::vector m_StorageSession;
void Server::startAcceptNewConnectionAsync() { m_Acceptor.async_accept( [это](boost::system::error_code aError_code, boost::asio::ip::tcp::socket aSocket) { если (!aError_code) { boost::asio::ip::tcp::endpoint endpoint = aSocket.remote_endpoint(); std::shared_ptr newSession = std::make_shared (это, m_SessionID.GetFreeID(), endpoint.address().to_string(), endpoint.port(), std::move(aSocket)); newSession->start(); m_StorageSession.push_back(newSession); } startAcceptNewConnectionAsync(); }); } void Server::notificationAbautCloseConnectionSession(const size_t& theIdSession) { for (int i = 0; i getIdSession() == theIdSession) { m_SessionID.DeleteSession(m_StorageSession->getIdSession()); m_StorageSession->закрыть(); перерыв; } } } Сессия::~Сессия() { если (m_Owner) { m_Owner-> notificationAbautCloseConnectionSession (m_IdSession); // Сервер*m_Владелец } } void Session::do_read() { автоматически себя (shared_from_this()); m_Socket.async_read_some(boost::asio::buffer(m_FrameCommunicationDataIn.getBuforData() + m_FrameCommunicationDataIn.getIndexSaveDataInBuffor(), m_FrameCommunicationDataIn.getSizeBufforData()), [this, self](boost::system::error_code ec, std::size_t length) { если (!ec) { если (длина!= 0) { m_FrameCommunicationDataIn.setAmauntCopyDataIn(длина); новыеДанныеИзСессии(); } еще { это->~Сессия(); } do_read(); } }); } Я хочу, чтобы сеанс уведомил сервер о том, что он завершил получение данных и сервер удалил их из вектора.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение