115 lines
3.0 KiB
Ucode
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;
|
||
|
}
|