add network.get_total_upload, .get_total_download

This commit is contained in:
MihailRis
2024-11-28 10:21:16 +03:00
parent 9b73e78a37
commit 46628263d1
3 changed files with 39 additions and 12 deletions
@@ -159,9 +159,19 @@ static int l_is_serveropen(lua::State* L) {
return lua::pushboolean(L, false); return lua::pushboolean(L, false);
} }
static int l_get_total_upload(lua::State* L) {
return lua::pushinteger(L, engine->getNetwork().getTotalUpload());
}
static int l_get_total_download(lua::State* L) {
return lua::pushinteger(L, engine->getNetwork().getTotalDownload());
}
const luaL_Reg networklib[] = { const luaL_Reg networklib[] = {
{"get", lua::wrap<l_get>}, {"get", lua::wrap<l_get>},
{"get_binary", lua::wrap<l_get_binary>}, {"get_binary", lua::wrap<l_get_binary>},
{"get_total_upload", lua::wrap<l_get_total_upload>},
{"get_total_download", lua::wrap<l_get_total_download>},
{"__open", lua::wrap<l_open>}, {"__open", lua::wrap<l_open>},
{"__closeserver", lua::wrap<l_closeserver>}, {"__closeserver", lua::wrap<l_closeserver>},
{"__connect", lua::wrap<l_connect>}, {"__connect", lua::wrap<l_connect>},
+27 -10
View File
@@ -367,12 +367,16 @@ public:
} }
} }
size_t getTotalUpload() const override { size_t pullUpload() override {
return totalUpload; size_t size = totalUpload;
totalUpload = 0;
return size;
} }
size_t getTotalDownload() const override { size_t pullDownload() override {
return totalDownload; size_t size = totalDownload;
totalDownload = 0;
return size;
} }
static std::shared_ptr<SocketConnection> connect( static std::shared_ptr<SocketConnection> connect(
@@ -586,15 +590,28 @@ size_t Network::getTotalDownload() const {
void Network::update() { void Network::update() {
requests->update(); requests->update();
totalDownload = 0;
totalUpload = 0;
{ {
std::lock_guard lock(connectionsMutex); std::lock_guard lock(connectionsMutex);
for (const auto& [_, socket] : connections) { auto socketiter = connections.begin();
totalDownload += socket->getTotalDownload(); while (socketiter != connections.end()) {
auto socket = socketiter->second.get();
totalDownload += socket->pullDownload();
totalUpload += socket->pullUpload();
if (socket->available() == 0 &&
socket->getState() == ConnectionState::CLOSED) {
socketiter = connections.erase(socketiter);
continue;
}
++socketiter;
} }
for (const auto& [_, socket] : connections) { auto serveriter = servers.begin();
totalUpload += socket->getTotalUpload(); while (serveriter != servers.end()) {
auto server = serveriter->second.get();
if (!server->isOpen()) {
serveriter = servers.erase(serveriter);
continue;
}
++serveriter;
} }
} }
} }
+2 -2
View File
@@ -43,8 +43,8 @@ namespace network {
virtual void close() = 0; virtual void close() = 0;
virtual int available() = 0; virtual int available() = 0;
virtual size_t getTotalUpload() const = 0; virtual size_t pullUpload() = 0;
virtual size_t getTotalDownload() const = 0; virtual size_t pullDownload() = 0;
virtual ConnectionState getState() const = 0; virtual ConnectionState getState() const = 0;
}; };