rework UDP recv loop, add packet statistics tracking

The UDPServerMain was badly designed and had multiple potential bugs and
unexpected & silent failures. The changes simplify the code here, and
tracks those unexpected failures in app-wide statistics. Also added,
while at that, some more tracking of how many packets and bytes are
sent & received per client
This commit is contained in:
Lion Kortlepel
2022-10-26 14:13:05 +02:00
parent e77dfd5a57
commit 6842dccfc3
4 changed files with 64 additions and 21 deletions

View File

@@ -140,12 +140,14 @@ std::optional<std::weak_ptr<TClient>> GetClient(TServer& Server, int ID) {
std::optional<std::weak_ptr<TClient>> MaybeClient { std::nullopt };
Server.ForEachClient([&](std::weak_ptr<TClient> CPtr) -> bool {
ReadLock Lock(Server.GetClientMutex());
if (!CPtr.expired()) {
try {
auto C = CPtr.lock();
if (C->GetID() == ID) {
MaybeClient = CPtr;
return false;
}
} catch (const std::exception&) {
// ignore
}
return true;
});