/
Shymer123
/
LumenServer
Обзор
Документация
Войти
/
Shymer123
/
LumenServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Server/SourceFiles/Core/Network/TcpServer.cpp
78 строк
2 KB
Shymer123
Initial commit: LumenServer
20 июн 2026, 12:43
20 июн 2026, 12:43
173f14c
Код
Авторство
О чём код?
#include "TcpServer.h" #include "TcpSession.h" #include <iostream> namespace Core::Network { TcpServer::TcpServer(boost::asio::io_context& io, unsigned short port, Router& router) : m_acceptor(io, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)), m_socket(io), m_router(router) {} TcpServer::~TcpServer() { stop(); } void TcpServer::startAccept() { std::cout << "[TcpServer] Start connection acceptance" << std::endl; doAccept(); } void TcpServer::stop() { std::lock_guard<std::mutex> lock(m_mutex); if(m_stopped) return; m_stopped = true; std::cout << "[TcpServer] Server stopping..." << std::endl; boost::system::error_code ec; m_acceptor.close(ec); if(m_socket.is_open()) { m_socket.close(); } for(auto& s : m_sessions) { s->stop(); } m_sessions.clear(); } void TcpServer::doAccept() { m_acceptor.async_accept(m_socket, [this](boost::system::error_code ec) { if(!ec) { auto session = std::make_shared<TcpSession>(std::move(m_socket), std::ref(m_router)); { std::lock_guard<std::mutex> lock(m_mutex); m_sessions.insert(session); } session->start([this, weakSession = std::weak_ptr<TcpSession>(session)]() { onSessionEnded(weakSession); }); } if(m_acceptor.is_open()) { doAccept(); } }); } void TcpServer::onSessionEnded(std::weak_ptr<TcpSession> weakSession) { if(auto session = weakSession.lock()) { std::lock_guard<std::mutex> lock(m_mutex); m_sessions.erase(session); } } } // namespace Core::Network