diff --git a/res/scripts/classes.lua b/res/scripts/classes.lua index 5454fbfb..e950aa0d 100644 --- a/res/scripts/classes.lua +++ b/res/scripts/classes.lua @@ -273,7 +273,7 @@ network.__process_events = function() _http_response_callbacks[event[3]] = nil _http_error_callbacks[event[3]] = nil if callback then - callback(event[2]) + callback(event[2], event[4]) end end end diff --git a/src/logic/scripting/lua/libs/libnetwork.cpp b/src/logic/scripting/lua/libs/libnetwork.cpp index c41a32d8..6e548cf9 100644 --- a/src/logic/scripting/lua/libs/libnetwork.cpp +++ b/src/logic/scripting/lua/libs/libnetwork.cpp @@ -88,27 +88,24 @@ static int perform_get(lua::State* L, network::Network& network, bool binary) { int currentRequestId = request_id++; - network.get(url, [currentRequestId, binary](std::vector bytes) { - push_event(NetworkEvent( - RESPONSE, - ResponseEventDto { - 200, - binary, - currentRequestId, - std::move(bytes) - } - )); - }, [currentRequestId](int code) { - push_event(NetworkEvent( - RESPONSE, - ResponseEventDto { - code, - false, - currentRequestId, - {} - } - )); - }, std::move(headers)); + network.get( + url, + [currentRequestId, binary](std::vector bytes) { + push_event(NetworkEvent( + RESPONSE, + ResponseEventDto { + 200, binary, currentRequestId, std::move(bytes)} + )); + }, + [currentRequestId, binary](int code, std::vector bytes) { + push_event(NetworkEvent( + RESPONSE, + ResponseEventDto { + code, binary, currentRequestId, std::move(bytes)} + )); + }, + std::move(headers) + ); return lua::pushinteger(L, currentRequestId); } @@ -138,21 +135,17 @@ static int l_post(lua::State* L, network::Network& network) { url, string, [currentRequestId](std::vector bytes) { - auto buffer = std::make_shared>( - reinterpret_cast(bytes.data()), bytes.size() - ); push_event(NetworkEvent( RESPONSE, ResponseEventDto { - 200, - false, - currentRequestId, - std::vector(buffer->begin(), buffer->end())} + 200, false, currentRequestId, std::move(bytes)} )); }, - [currentRequestId](int code) { + [currentRequestId](int code, std::vector bytes) { push_event(NetworkEvent( - RESPONSE, ResponseEventDto {code, false, currentRequestId, {}} + RESPONSE, + ResponseEventDto { + code, false, currentRequestId, std::move(bytes)} )); }, std::move(headers) diff --git a/src/network/Network.cpp b/src/network/Network.cpp index b175a809..7d33536c 100644 --- a/src/network/Network.cpp +++ b/src/network/Network.cpp @@ -173,7 +173,7 @@ public: auto message = curl_multi_strerror(res); logger.error() << message << " (" << url << ")"; if (onReject) { - onReject(HTTP_BAD_GATEWAY); + onReject(HTTP_BAD_GATEWAY, {}); } url = ""; } @@ -188,7 +188,7 @@ public: auto message = curl_multi_strerror(res); logger.error() << message << " (" << url << ")"; if (onReject) { - onReject(HTTP_BAD_GATEWAY); + onReject(HTTP_BAD_GATEWAY, {}); } curl_multi_remove_handle(multiHandle, curl); url = ""; @@ -213,9 +213,14 @@ public: onResponse(std::move(buffer)); } } else { - logger.error() << "response code " << response << " (" << url << ")"; + logger.error() + << "response code " << response << " (" << url << ")" + << (buffer.empty() + ? "" + : std::to_string(buffer.size()) + " byte(s)"); + totalDownload += buffer.size(); if (onReject) { - onReject(response); + onReject(response, std::move(buffer)); } } url = ""; diff --git a/src/network/Network.hpp b/src/network/Network.hpp index 41ebbe13..054b9444 100644 --- a/src/network/Network.hpp +++ b/src/network/Network.hpp @@ -11,7 +11,7 @@ namespace network { using OnResponse = std::function)>; - using OnReject = std::function; + using OnReject = std::function)>; using ConnectCallback = std::function; using ServerDatagramCallback = std::function; using ClientDatagramCallback = std::function; diff --git a/test/network/curltest.cpp b/test/network/curltest.cpp index e365651e..42806c77 100644 --- a/test/network/curltest.cpp +++ b/test/network/curltest.cpp @@ -16,7 +16,7 @@ TEST(curltest, curltest) { auto view = std::string_view(data.data(), data.size()); auto value = json::parse(view); std::cout << value << std::endl; - }, [](auto){} + }, [](auto, auto){} ); std::cout << "upload: " << network->getTotalUpload() << " B" << std::endl; std::cout << "download: " << network->getTotalDownload() << " B" << std::endl;