Initial Commit - Lesson 31 (Commit #1)

This commit is contained in:
Norman Lansing
2026-02-24 22:39:26 -05:00
commit 9591e7f503
4631 changed files with 1019212 additions and 0 deletions

View File

@@ -0,0 +1,106 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include "NetworkStats.h"
#include "Engine/NetDriver.h"
#include "Engine.h"
namespace Aws {
namespace GameLift {
namespace Metrics {
GAMELIFT_METRICS_DEFINE_GAUGE(MetricConnectionCount);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricBytesIn);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricBytesOut);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricPacketsIn);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricPacketsInLost);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricPacketsOut);
GAMELIFT_METRICS_DEFINE_COUNTER(MetricPacketsOutLost);
}
}
}
FNetworkStats::FNetworkStats()
{
if (auto NetDriver = GetNetDriver())
{
LastInBytes = NetDriver->InTotalBytes;
LastOutBytes = NetDriver->OutTotalBytes;
LastInPackets = NetDriver->InTotalPackets;
LastOutPackets = NetDriver->OutTotalPackets;
LastInPacketsLost = NetDriver->InTotalPacketsLost;
LastOutPacketsLost = NetDriver->OutTotalPacketsLost;
}
}
void FNetworkStats::Collect()
{
if (auto NetDriver = GetNetDriver())
{
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricBytesIn, NetDriver->InTotalBytes - LastInBytes);
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricBytesOut, NetDriver->OutTotalBytes - LastOutBytes);
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricPacketsIn, NetDriver->InTotalPackets - LastInPackets);
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricPacketsOut, NetDriver->OutTotalPackets - LastOutPackets);
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricPacketsInLost, NetDriver->InTotalPacketsLost - LastInPacketsLost);
GAMELIFT_METRICS_ADD(Aws::GameLift::Metrics::MetricPacketsOutLost, NetDriver->OutTotalPacketsLost - LastOutPacketsLost);
LastInBytes = NetDriver->InTotalBytes;
LastOutBytes = NetDriver->OutTotalBytes;
LastInPackets = NetDriver->InTotalPackets;
LastOutPackets = NetDriver->OutTotalPackets;
LastInPacketsLost = NetDriver->InTotalPacketsLost;
LastOutPacketsLost = NetDriver->OutTotalPacketsLost;
GAMELIFT_METRICS_SET(Aws::GameLift::Metrics::MetricConnectionCount, NetDriver->ClientConnections.Num());
}
else
{
UE_LOG(LogGameLiftMetrics, Error, TEXT("Net driver is null. Cannot log network metrics."));
}
}
const UNetDriver* FNetworkStats::GetNetDriver() const
{
UEngine* Engine = GEngine;
if (!IsValid(Engine))
{
UE_LOG(LogGameLiftMetrics, Error, TEXT("Engine pointer is not valid when retrieving net driver."));
return nullptr;
}
const auto& WorldContexts = Engine->GetWorldContexts();
if (WorldContexts.Num() == 0)
{
// no worlds are loaded
// generally can only be true before everything is fully initialized
UE_LOG(LogGameLiftMetrics, Error, TEXT("No world is loaded when retrieving net driver."));
return nullptr;
}
// Only one world context should be present outside Editor.
// (editor has multiple)
// Refer to FWorldContext comment in Engine.h
const FWorldContext& WorldContext = WorldContexts[0];
check(WorldContext.WorldType == EWorldType::Game);
// In theory multiple net drivers might be present.
// One will be for gameplay but additional ones might be opened for non-gameplay traffic.
// Might be null during initialisation.
if (WorldContext.ActiveNetDrivers.Num() == 0)
{
UE_LOG(LogGameLiftMetrics, Error, TEXT("No active net drivers. Cannot acquire network metrics."));
return nullptr;
}
return WorldContext.ActiveNetDrivers[0].NetDriver;
}