注釈:本資料はAI技術を用いて翻訳されています。
SDK の Turn Manager の追加機能
AGS SDK の Turn Manager API は、ゲームクライアントの追加要件に対応するいくつかのユーティリティ機能をサポートしています。
TURN サーバーを取得する
この関数は、利用可能なすべての TURN サーバーのリストを取得するためにゲームクライアントによって呼び出されます。
- Unreal Engine
- Unity Engine
AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServersV2(THandler<FAccelByteModelsTurnServerList>::CreateLambda(
[](const FAccelByteModelsTurnServerList& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Servers Success!"));
}),
FErrorHandler::CreateLambda([](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Servers Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));
TurnServerList getTurnServerResult = null;
AccelByteSDK.GetClientRegistry().GetApi().GetTurnManager().GetTurnServers(result =>
{
if (result.IsError)
{
// Do something if the operation fails
UnityEngine.Debug.LogError($"failed to get TURN servers [{result.Error.Code}]:{result.Error.Message}");
return;
}
// Do something if the operation succeeds
getTurnServerResult = result.Value;
});
最も近い TURN サーバーを取得する
この関数は、利用可能なすべての TURN サーバーのリストを自動的に取得し、すべてのサーバーに ping を送信して最も近いリージョンを提供します。
- Unreal Engine
- Unity Engine
AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetClosestTurnServerV2(THandler<FAccelByteModelsTurnServer>::CreateLambda(
[](const FAccelByteModelsTurnServer& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Closest Turn Server Success!"));
}),
FErrorHandler::CreateLambda([](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Closest Turn Server Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));
// Get all available TURN servers
TurnServerList getTurnServerResult = null;
AccelByteSDK.GetClientRegistry().GetApi().GetTurnManager().GetTurnServers(result =>
{
if (result.IsError)
{
// Do something if the operation fails
UnityEngine.Debug.LogError($"Failed to get TURN servers [{result.Error.Code}]:{result.Error.Message}");
return;
}
// Do something if the operation succeeds
getTurnServerResult = result.Value;
});
// Get the closest TURN server based on the server latencies
TurnServer closestTurnServer = null;
getTurnServerResult.GetClosestTurnServer()
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
// Do something if the operation succeeds
closestTurnServer = result;
});
リージョン別に TURN サーバーのレイテンシを取得する
- Unreal Engine
- Unity Engine
この関数は、パラメータで特定のリージョンを使用して、合計レイテンシをミリ秒単位で返します。
AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServerLatencyByRegion(Region, THandler<int32>::CreateLambda(
[&FuncName, &OutResponse, &bIsOk, &bIsDone](const int32& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latency By Region Success!"));
}),
FErrorHandler::CreateLambda([&bIsDone](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latency By Region Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));
この関数は、パラメータで特定のリージョンを使用して、合計レイテンシをミリ秒単位で返します。必要に応じて useCase を調整できます。getTurnServerResult 値を取得するには、TURN サーバーを取得する を参照してください。
useCase:true: キャッシュされたレイテンシを使用しますuseCase:false: サーバーに ping を送信して最新のレイテンシを取得します
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServersResult;
// Define a specific server
TurnServer turnServer = getTurnServerResult.servers[0];
// Generate specific server as a latency using latest latency
// Can be used to regenerate the latest latency without calling the GetTurnServers() interface
int latency;
turnServer.GetLatency(useCache: false)
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
latency = result;
// Do something if the operation succeeds
});
TURN サーバーのレイテンシを取得する
- Unreal Engine
- Unity Engine
この関数は、利用可能なすべての TURN サーバーリージョンのレイテンシを返します。
AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetTurnServerLatencies(THandler<TArray<TPair<FString, float>>>::CreateLambda(
[&FuncName, &OutResponse, &bIsOk, &bIsDone](const TArray<TPair<FString, float>>& Result)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latencies Success!"));
}),
FErrorHandler::CreateLambda([&bIsDone](const int32 ErrorCode, const FString& ErrorMessage)
{
UE_LOG(LogTemp, Log, TEXT("Get Turn Server Latencies Failed! [%d]: %s"), ErrorCode, *ErrorMessage);
}));
この関数は、最新のレイテンシを含むすべての利用可能な TURN サーバーリージョンのレイテンシマップを返します。必要に応じて useCase を調整してください。getTurnServerResult 値を取得するには、TURN サーバーを取得する を参照してください。
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServersResult;
// Generate all TURN servers as a latencies map with latest latencies
// Can be use to regenerate the latest latencies again without calling GetTurnServers() interface
// This map can be used for MatchmakingV2CreateTicketRequestOptionalParams on CreateMatchmakingTicket
Dictionary<string, int> latenciesMap = null;
getTurnServersResult.Value.GenerateLatenciesMap(useCache: false)
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
latenciesMap = result;
// Do something if the operation succeeds
});
この関数は、最新のレイテンシを含む特定の TURN サーバーのレイテンシマップを返します。getTurnServerResult 値を取得するには、TURN サーバーを取得する を参照してください。
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServersResult;
// define a specific server
TurnServer turnServer = getTurnServersResult.servers[0];
// Generate specific server as a latency map using latest latency
// Can be use to regenerate the latest latency again without calling GetTurnServers() interface
// This map can be used for MatchmakingV2CreateTicketRequestOptionalParams on CreateMatchmakingTicket
Dictionary<string, int> latencyMap = null;
turnServer.GenerateLatencyMap(useCache: false)
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
latencyMap = result;
// Do something if the operation succeeds
});
キャッシュされたレイテンシを取得する
- Unreal Engine
- Unity Engine
AGS Unreal SDK は、利用可能なリージョンに ping を送信した後、レイテンシをキャッシュします。この関数はキャッシュされたレイテンシを返します。
AccelByteOnlineSubsystemPtr->GetApiClient()->TurnManager.GetCachedLatencies();
この関数は、すべてのサーバーからキャッシュされたレイテンシマップを返します。
getTurnServerResult 値を取得するには、TURN サーバーを取得する を参照してください。
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServersResult;
// Generate all TURN servers as a latencies map using cached latencies
// Allow to get cached latencies without calling GetTurnServers() interface again (Only need to call that interface once)
// This map can be used for MatchmakingV2CreateTicketRequestOptionalParams on CreateMatchmakingTicket
Dictionary<string, int> latenciesMap = null;
getTurnServersResult.GenerateLatenciesMap(useCache: true)
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
latenciesMap = result;
// Do something if the operation succeeds
});
この関数は、特定のサーバーからキャッシュされたレイテンシマップを返します。
getTurnServerResult 値を取得するには、TURN サーバーを取得する を参照してください。
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServersResult;
// define a specific server
TurnServer turnServer = getTurnServersResult.servers[0];
// Generate specific server as a latency map using cached latency
// Allow to get cached latency without calling GetTurnServers() interface again (Only need to call that interface once)
// This map can be used for MatchmakingV2CreateTicketRequestOptionalParams on CreateMatchmakingTicket
Dictionary<string, int> latencyMap = null;
turnServer.GenerateLatencyMap(useCache: true)
.OnFailed(error =>
{
// Do something if the operation fails
})
.OnSuccess(result =>
{
latencyMap = result;
// Do something if the operation succeeds
});
レイテンシを手動で計算する
- Unity Engine
サーバーリストを取得してレイテンシ計算をスキップするには、次のコード例に従ってください。
GetTurnServerOptionalParameters optionalParameters = new GetTurnServerOptionalParameters();
optionalParameters.AutoCalculateLatency = false;
TurnServerList getTurnServerResult = null;
AccelByteSDK.GetClientRegistry().GetApi().GetTurnManager().GetTurnServers(optionalParameters, result =>
{
if (result.IsError)
{
// Do something if the operation fails
UnityEngine.Debug.LogError($"failed to get TURN servers [{result.Error.Code}]:{result.Error.Message}");
return;
}
// Do something if the operation succeeds
getTurnServerResult = result.Value;
});
SDK は、レイテンシを計算するためのヘルパー関数も提供しています。
// Get this value from the result of GetTurnServers() interface
TurnServerList getTurnServerResult;
// Define a specific server
TurnServer turnServer = getTurnServerResult.servers[0];
#if !UNITY_WEBGL || UNITY_EDITOR
AccelByte.Models.AccelByteResult<int ,Error> pingResult = AccelByte.Utils.Networking.UdpPing(turnServer.ip, (uint) turnServer.qos_port);
#else
// Web platform doesn't support UDP
// Latency must be estimated to the region by sending an HTTP request
string url = AccelByte.Utils.Networking.GetTestServerUrlByRegion(turnServer.region);
AccelByte.Models.AccelByteResult<int ,Error> pingResult = AccelByte.Utils.Networking.HttpPing(url);
#endif
pingResult.OnSuccess(latency =>
{
Debug.Log($"Server {turnServer.region} has latency {latency} ms");
});
pingResult.OnFailed(error =>
{
Debug.LogWarning($"Failed calculating server {turnServer.region} latency.\n{error.Message}");
});