add network.get_total_upload, .get_total_download
This commit is contained in:
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user