1
0
KF2-Dev-Scripts/IpDrv/Classes/McpServerTimeManager.uc
2020-12-13 18:01:13 +03:00

115 lines
3.0 KiB
Ucode

/**
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
*
* Implementation of interface for requesting UTC time from the server
*/
class McpServerTimeManager extends McpServerTimeBase;
`include(Engine\Classes\HttpStatusCodes.uci)
/** The class name to use in the factory method to create our instance */
var config String TimeStampUrl;
/** String for the last valid server time response */
var String LastTimeStamp;
/** HTTP request object that is used for the server time query. None when no request is in flight */
var HttpRequestInterface HTTPRequestServerTime;
/**
* Request current UTC time from the server
*/
function QueryServerTime()
{
local string Url,ErrorStr;
local bool bPending;
if (HTTPRequestServerTime == None)
{
HTTPRequestServerTime = class'HttpFactory'.static.CreateRequest();
if (HTTPRequestServerTime != None)
{
Url = GetBaseURL() $ TimeStampUrl $ GetAppAccessURL();
HTTPRequestServerTime.SetURL(Url);
HTTPRequestServerTime.SetVerb("GET");
HTTPRequestServerTime.OnProcessRequestComplete = OnQueryServerTimeHTTPRequestComplete;
if (HTTPRequestServerTime.ProcessRequest())
{
bPending = true;
}
else
{
ErrorStr = "failed to start request, Url="$Url;
`log(`StaticLocation@ErrorStr);
}
}
}
else
{
ErrorStr = "last request is still being processed";
`log(`StaticLocation@ErrorStr);
}
if (!bPending)
{
OnQueryServerTimeComplete(false,"",ErrorStr);
}
}
/**
* Called once the request/response has completed for getting server time from Mcp
*
* @param Request the request object that was used
* @param Response the response object that was generated
* @param bWasSuccessful whether or not the request completed successfully
*/
private function OnQueryServerTimeHTTPRequestComplete(HttpRequestInterface Request, HttpResponseInterface Response, bool bWasSuccessful)
{
local string TimeStr,ResponseStr,ErrorStr;
local int Idx;
local bool bResult;
HTTPRequestServerTime = None;
if (bWasSuccessful &&
Response != None)
{
if (Response.GetResponseCode() == `HTTP_STATUS_OK)
{
ResponseStr = Response.GetContentAsString();
Idx = InStr(ResponseStr, "Timestamp=");
if (Idx != INDEX_NONE)
{
// Example : TimeFormat="yyyy.MM.dd-HH.mm.ss" Timestamp=2011.10.29-03.19.49
TimeStr = Mid(ResponseStr, Idx);
Idx = InStr(ResponseStr, "=");
TimeStr = Mid(TimeStr, Idx);
// cache last valid time stamp
LastTimeStamp = TimeStr;
bResult = true;
}
}
else
{
ErrorStr = "invalid server response code, status="$Response.GetResponseCode();
`log(`StaticLocation@ErrorStr);
}
}
else
{
ErrorStr = "no response";
`log(`StaticLocation@ErrorStr);
}
OnQueryServerTimeComplete(bResult,TimeStr,ErrorStr);
}
/**
* Retrieve cached timestamp from last server time query
*
* @return string representation of time (yyyy.MM.dd-HH.mm.ss)
*/
function String GetLastServerTime()
{
return LastTimeStamp;
}