Initial Commit - Lesson 31 (Commit #1)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user