/
Shymer123
/
LumenServer
Обзор
Документация
Войти
/
Shymer123
/
LumenServer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Server/SourceFiles/Core/Network/ResponseContext.cpp
75 строк
3 KB
Shymer123
Initial commit: LumenServer
20 июн 2026, 12:43
20 июн 2026, 12:43
173f14c
Код
Авторство
О чём код?
#include "ResponseContext.h" #include "TcpSession.h" #include "Core/Utils/Compression.h" #include <iostream> namespace Core::Network { ResponseContext::ResponseContext(std::shared_ptr<TcpSession> session) : m_weakSession(session) {} ResponseContext::ResponseContext(ResponseContext&& other) noexcept : m_weakSession(std::move(other.m_weakSession)) {} ResponseContext& ResponseContext::operator=(ResponseContext&& other) noexcept { if(this != &other) { m_weakSession = std::move(other.m_weakSession); } return *this; } void ResponseContext::sendJson(const nlohmann::json& json) { if(m_sent.exchange(true)) return; if(auto session = m_weakSession.lock()) { try { std::string jsonStr = json.dump(); std::vector<std::byte> input(reinterpret_cast<const std::byte*>(jsonStr.data()), reinterpret_cast<const std::byte*>(jsonStr.data() + jsonStr.size())); auto compressed = Utils::compress(input); Packages::Packet packet(Packages::MessageType::JSON, compressed); boost::asio::post(session->get_executor(), [session, packet = std::move(packet)]() mutable { session->sendPacket(packet); }); } catch(const std::exception& ex) { std::cerr << "[ResponseContext] sendJson error: " << ex.what() << std::endl; } } } void ResponseContext::sendFile(const nlohmann::json& metadata, const std::vector<std::byte>& data) { if (m_sent.exchange(true)) return; if (auto session = m_weakSession.lock()) { try { std::string metadataStr = metadata.dump(); std::vector<std::byte> input(reinterpret_cast<const std::byte*>(metadataStr.data()), reinterpret_cast<const std::byte*>(metadataStr.data() + metadataStr.size())); auto compressedMeta = Utils::compress(input); auto compressedData = Utils::compress(data); Packages::Packet packet(compressedMeta, compressedData); boost::asio::post(session->get_executor(), [session, packet = std::move(packet)]() mutable { session->sendPacket(packet); }); } catch(const std::exception& ex) { std::cerr << "[ResponseContext] sendFile error: " << ex.what() << std::endl; } } } } // namespace Core::Network