refactor(common): remove session and tcp server base classes
This commit is contained in:
@@ -1,70 +0,0 @@
|
||||
#include "session_base.hpp"
|
||||
#include "logger.hpp"
|
||||
#include <boost/asio/write.hpp>
|
||||
|
||||
SessionBase::SessionBase(TcpSocket socket)
|
||||
: socket_(std::move(socket))
|
||||
{
|
||||
}
|
||||
|
||||
void SessionBase::start()
|
||||
{
|
||||
doRead();
|
||||
}
|
||||
|
||||
void SessionBase::doRead()
|
||||
{
|
||||
using namespace boost::asio;
|
||||
|
||||
auto self = shared_from_this();
|
||||
|
||||
auto handler = [this, self](ErrorCode ec, std::size_t bytesTransferred) {
|
||||
onRead(ec, bytesTransferred);
|
||||
};
|
||||
|
||||
socket_.async_read_some(buffer(buffer_), handler);
|
||||
}
|
||||
|
||||
void SessionBase::onRead(ErrorCode ec, std::size_t bytesTransferred)
|
||||
{
|
||||
if (ec) {
|
||||
Logger::error("Read error: " + ec.message());
|
||||
return;
|
||||
}
|
||||
|
||||
std::string rawRequest(buffer_.data(), bytesTransferred);
|
||||
Logger::info("Received request:\n" + rawRequest);
|
||||
|
||||
try {
|
||||
handleRequest(rawRequest);
|
||||
} catch (const std::exception &ex) {
|
||||
Logger::error(std::string("Request handling failed: ") + ex.what());
|
||||
}
|
||||
}
|
||||
|
||||
void SessionBase::doWrite(const std::string &response)
|
||||
{
|
||||
using namespace boost::asio;
|
||||
|
||||
auto self = shared_from_this();
|
||||
auto onWriteHandler =
|
||||
[this, self](ErrorCode ec, std::size_t /*bytesTransferred*/) {
|
||||
if (ec) {
|
||||
Logger::error("Write error: " + ec.message());
|
||||
}
|
||||
|
||||
ErrorCode shutdownEc;
|
||||
if (socket_.shutdown(TcpSocket::shutdown_both, shutdownEc)) {
|
||||
Logger::warn("Shutdown error: " + shutdownEc.message());
|
||||
}
|
||||
|
||||
ErrorCode closeEc;
|
||||
if (socket_.close(closeEc)) {
|
||||
Logger::warn("Close error: " + closeEc.message());
|
||||
} else {
|
||||
Logger::info("Connection closed");
|
||||
}
|
||||
};
|
||||
|
||||
async_write(socket_, buffer(response), onWriteHandler);
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "aliases.hpp"
|
||||
#include <array>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class SessionBase : public std::enable_shared_from_this<SessionBase>
|
||||
{
|
||||
public:
|
||||
explicit SessionBase(TcpSocket socket);
|
||||
virtual ~SessionBase() = default;
|
||||
|
||||
void start();
|
||||
|
||||
protected:
|
||||
virtual void handleRequest(const std::string_view rawRequest) = 0;
|
||||
|
||||
void doRead();
|
||||
void onRead(ErrorCode ec, std::size_t bytesTransferred);
|
||||
void doWrite(const std::string &response);
|
||||
|
||||
TcpSocket socket_;
|
||||
std::array<char, 8192> buffer_;
|
||||
};
|
||||
@@ -1,23 +0,0 @@
|
||||
#include "tcp_server_base.hpp"
|
||||
#include "logger.hpp"
|
||||
|
||||
TcpServerBase::TcpServerBase(IoContext &io, unsigned short port)
|
||||
: acceptor_(io, TcpEndpoint(boost::asio::ip::tcp::v4(), port))
|
||||
{
|
||||
}
|
||||
|
||||
void TcpServerBase::start()
|
||||
{
|
||||
auto doAccept = [this]() {
|
||||
acceptor_.async_accept([this](ErrorCode ec, TcpSocket socket) {
|
||||
if (!ec) {
|
||||
Logger::info("New client connected");
|
||||
createSession(std::move(socket));
|
||||
} else {
|
||||
Logger::error("Accept error: " + ec.message());
|
||||
}
|
||||
start(); // continue accepting
|
||||
});
|
||||
};
|
||||
doAccept();
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "aliases.hpp"
|
||||
|
||||
class TcpServerBase
|
||||
{
|
||||
public:
|
||||
TcpServerBase(IoContext &io, unsigned short port);
|
||||
virtual ~TcpServerBase() = default;
|
||||
|
||||
void start();
|
||||
|
||||
protected:
|
||||
virtual void createSession(TcpSocket socket) = 0;
|
||||
|
||||
TcpAcceptor acceptor_;
|
||||
};
|
||||
Reference in New Issue
Block a user