103 lines
2.7 KiB
Ucode
103 lines
2.7 KiB
Ucode
//=============================================================================
|
|
// KFSteamWebAPICall
|
|
//=============================================================================
|
|
// Base class for Steamworks Web API functionality. Copypasta from KF1
|
|
//=============================================================================
|
|
// Copyright (C) 2015 Tripwire Interactive LLC
|
|
// - Joshua "Josh" Rowan
|
|
// Based off of KFSteamWebApi Copyright 2007 Tripwire Interactive, Inc.
|
|
// All Rights Reserved.
|
|
//=============================================================================
|
|
|
|
class KFSteamWebAPICall extends Object
|
|
native
|
|
abstract
|
|
inherits(FTickableObject);
|
|
|
|
var float RequestTimeout;
|
|
var string steamAPIAddr;
|
|
var string Format;
|
|
var native pointer Downloader{class FHttpDownloadString};
|
|
|
|
/** Used to toggle debug logging */
|
|
var bool bDebug;
|
|
|
|
//Used by concrete subclasses
|
|
var string APICall;
|
|
|
|
cpptext
|
|
{
|
|
/**
|
|
* Allows per frame work to be done
|
|
*
|
|
* @param DeltaTime the amount of time that has passed since the last tick
|
|
*/
|
|
virtual void Tick(FLOAT);
|
|
|
|
/**
|
|
* Returns whether it is okay to tick this object. E.g. objects being loaded in the background shouldn't be ticked
|
|
* till they are finalized and unreachable objects cannot be ticked either.
|
|
*
|
|
* @return TRUE if tickable, FALSE otherwise
|
|
*/
|
|
virtual UBOOL IsTickable() const
|
|
{
|
|
// We cannot tick objects that are unreachable or are in the process of being loaded in the background.
|
|
return Downloader && !HasAnyFlags( RF_Unreachable | RF_AsyncLoading );
|
|
}
|
|
|
|
/** Call CleanUp on GC */
|
|
virtual void FinishDestroy();
|
|
|
|
/** Destroy HttpDownloader */
|
|
void CleanUp();
|
|
}
|
|
|
|
function CallWebProcedure(string FunctionCall, string Parameters)
|
|
{
|
|
local string URL;
|
|
local string Payload;
|
|
|
|
URL = "http://" $ steamAPIAddr $ FunctionCall;
|
|
Payload = Parameters;
|
|
if (Len(payload) > 0)
|
|
{
|
|
Payload = Payload $ "&";
|
|
}
|
|
Payload = Payload $ Format;
|
|
|
|
SendHTTPGet(steamAPIAddr, URL, Payload, RequestTimeout);
|
|
}
|
|
|
|
native function SendHTTPGet(string Domain, string URL, string Payload, float Timeout);
|
|
|
|
event Finished(bool success, string ReturnStr)
|
|
{
|
|
local JsonObject response;
|
|
|
|
if (!success)
|
|
{
|
|
`log(Class.Name @ "did not get HTTP response.", bDebug);
|
|
return;
|
|
}
|
|
response = class'JsonObject'.static.DecodeJson(ReturnStr);
|
|
|
|
if ( response == none )
|
|
{
|
|
`log(Class.Name @ "could not parse HTTP response.", bDebug);
|
|
return;
|
|
}
|
|
|
|
ProcessResponse(response);
|
|
}
|
|
|
|
function ProcessResponse(JsonObject response);
|
|
|
|
defaultproperties
|
|
{
|
|
//bHidden=true
|
|
steamAPIAddr="api.steampowered.com"
|
|
RequestTimeout=10.f
|
|
Format="format=json"
|
|
}
|