refactor Network
This commit is contained in:
parent
772fafb6ad
commit
5e063d9fe0
@ -11,7 +11,7 @@ static int l_http_get(lua::State* L) {
|
||||
lua::pushvalue(L, 2);
|
||||
auto onResponse = lua::create_lambda(L);
|
||||
|
||||
engine->getNetwork().httpGet(url, [onResponse](std::vector<char> bytes) {
|
||||
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
||||
engine->postRunnable([=]() {
|
||||
onResponse({std::string(bytes.data(), bytes.size())});
|
||||
});
|
||||
@ -25,7 +25,7 @@ static int l_http_get_binary(lua::State* L) {
|
||||
lua::pushvalue(L, 2);
|
||||
auto onResponse = lua::create_lambda(L);
|
||||
|
||||
engine->getNetwork().httpGet(url, [onResponse](std::vector<char> bytes) {
|
||||
engine->getNetwork().get(url, [onResponse](std::vector<char> bytes) {
|
||||
auto buffer = std::make_shared<util::Buffer<ubyte>>(
|
||||
reinterpret_cast<const ubyte*>(bytes.data()), bytes.size()
|
||||
);
|
||||
|
||||
@ -31,7 +31,7 @@ struct Request {
|
||||
long maxSize;
|
||||
};
|
||||
|
||||
class CurlHttp : public Http {
|
||||
class CurlRequests : public Requests {
|
||||
CURLM* multiHandle;
|
||||
CURL* curl;
|
||||
|
||||
@ -45,11 +45,11 @@ class CurlHttp : public Http {
|
||||
|
||||
std::queue<Request> requests;
|
||||
public:
|
||||
CurlHttp(CURLM* multiHandle, CURL* curl)
|
||||
CurlRequests(CURLM* multiHandle, CURL* curl)
|
||||
: multiHandle(multiHandle), curl(curl) {
|
||||
}
|
||||
|
||||
virtual ~CurlHttp() {
|
||||
virtual ~CurlRequests() {
|
||||
curl_easy_cleanup(curl);
|
||||
curl_multi_remove_handle(multiHandle, curl);
|
||||
curl_multi_cleanup(multiHandle);
|
||||
@ -156,7 +156,7 @@ public:
|
||||
return totalDownload;
|
||||
}
|
||||
|
||||
static std::unique_ptr<CurlHttp> create() {
|
||||
static std::unique_ptr<CurlRequests> create() {
|
||||
auto curl = curl_easy_init();
|
||||
if (curl == nullptr) {
|
||||
throw std::runtime_error("could not initialzie cURL");
|
||||
@ -166,7 +166,7 @@ public:
|
||||
curl_easy_cleanup(curl);
|
||||
throw std::runtime_error("could not initialzie cURL-multi");
|
||||
}
|
||||
return std::make_unique<CurlHttp>(multiHandle, curl);
|
||||
return std::make_unique<CurlRequests>(multiHandle, curl);
|
||||
}
|
||||
};
|
||||
|
||||
@ -325,32 +325,23 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
class SocketTcp : public Tcp {
|
||||
public:
|
||||
SocketTcp() {};
|
||||
|
||||
std::shared_ptr<Socket> connect(const std::string& address, int port) override {
|
||||
return SocketImpl::connect(address, port);
|
||||
}
|
||||
};
|
||||
|
||||
Network::Network(std::unique_ptr<Http> http, std::unique_ptr<Tcp> tcp)
|
||||
: http(std::move(http)), tcp(std::move(tcp)) {
|
||||
Network::Network(std::unique_ptr<Requests> requests)
|
||||
: requests(std::move(requests)) {
|
||||
}
|
||||
|
||||
Network::~Network() = default;
|
||||
|
||||
void Network::httpGet(
|
||||
void Network::get(
|
||||
const std::string& url,
|
||||
OnResponse onResponse,
|
||||
OnReject onReject,
|
||||
long maxSize
|
||||
) {
|
||||
http->get(url, onResponse, onReject, maxSize);
|
||||
requests->get(url, onResponse, onReject, maxSize);
|
||||
}
|
||||
|
||||
std::shared_ptr<Socket> Network::connect(const std::string& address, int port) {
|
||||
auto socket = tcp->connect(address, port);
|
||||
auto socket = SocketImpl::connect(address, port);
|
||||
connections.push_back(socket);
|
||||
return socket;
|
||||
}
|
||||
@ -360,7 +351,7 @@ size_t Network::getTotalUpload() const {
|
||||
for (const auto& socket : connections) {
|
||||
totalUpload += socket->getTotalUpload();
|
||||
}
|
||||
return http->getTotalUpload() + totalUpload;
|
||||
return requests->getTotalUpload() + totalUpload;
|
||||
}
|
||||
|
||||
size_t Network::getTotalDownload() const {
|
||||
@ -368,15 +359,14 @@ size_t Network::getTotalDownload() const {
|
||||
for (const auto& socket : connections) {
|
||||
totalDownload += socket->getTotalDownload();
|
||||
}
|
||||
return http->getTotalDownload() + totalDownload;
|
||||
return requests->getTotalDownload() + totalDownload;
|
||||
}
|
||||
|
||||
void Network::update() {
|
||||
http->update();
|
||||
requests->update();
|
||||
}
|
||||
|
||||
std::unique_ptr<Network> Network::create(const NetworkSettings& settings) {
|
||||
auto http = CurlHttp::create();
|
||||
auto tcp = std::make_unique<SocketTcp>();
|
||||
return std::make_unique<Network>(std::move(http), std::move(tcp));
|
||||
auto requests = CurlRequests::create();
|
||||
return std::make_unique<Network>(std::move(requests));
|
||||
}
|
||||
|
||||
@ -11,9 +11,9 @@ namespace network {
|
||||
using OnResponse = std::function<void(std::vector<char>)>;
|
||||
using OnReject = std::function<void(const char*)>;
|
||||
|
||||
class Http {
|
||||
class Requests {
|
||||
public:
|
||||
virtual ~Http() {}
|
||||
virtual ~Requests() {}
|
||||
|
||||
virtual void get(
|
||||
const std::string& url,
|
||||
@ -38,24 +38,14 @@ namespace network {
|
||||
virtual size_t getTotalDownload() const = 0;
|
||||
};
|
||||
|
||||
class Tcp {
|
||||
public:
|
||||
virtual ~Tcp() {}
|
||||
|
||||
virtual std::shared_ptr<Socket> connect(
|
||||
const std::string& address, int port
|
||||
) = 0;
|
||||
};
|
||||
|
||||
class Network {
|
||||
std::unique_ptr<Http> http;
|
||||
std::unique_ptr<Tcp> tcp;
|
||||
std::unique_ptr<Requests> requests;
|
||||
std::vector<std::shared_ptr<Socket>> connections;
|
||||
public:
|
||||
Network(std::unique_ptr<Http> http, std::unique_ptr<Tcp> tcp);
|
||||
Network(std::unique_ptr<Requests> requests);
|
||||
~Network();
|
||||
|
||||
void httpGet(
|
||||
void get(
|
||||
const std::string& url,
|
||||
OnResponse onResponse,
|
||||
OnReject onReject = nullptr,
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
TEST(curltest, curltest) {
|
||||
NetworkSettings settings {};
|
||||
auto network = network::Network::create(settings);
|
||||
network->httpGet(
|
||||
network->get(
|
||||
"https://raw.githubusercontent.com/MihailRis/VoxelEngine-Cpp/refs/"
|
||||
"heads/curl/res/content/base/blocks/lamp.json",
|
||||
[](std::vector<char> data) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user