NicePack/sources/Data/NiceStorageClient.uc
2020-02-16 19:53:59 +07:00

191 lines
6.6 KiB
Ucode

//==============================================================================
// NicePack / NiceStorageClient
//==============================================================================
// Implements storage methods relevant only to client.
//==============================================================================
// 'Nice pack' source
// Do whatever the fuck you want with it
// Author: dkanus
// E-mail: dkanus@gmail.com
//==============================================================================
class NiceStorageClient extends NiceStorageBase
config(NicePack);
var NiceRepInfoRemoteData remoteRI;
function bool ConnectData(string ID){
if(ID == "") return false;
if(remoteRI == none) return false;
remoteRI.ServerAddListener(V(ID));
return true;
}
function bool IsLinkEstablished(){
return (remoteRI == none);
}
// Requests a creation of remote data storage on server.
function bool CreateData(string ID, NiceData.EDataPriority priority){
if(ID == "") return false;
if(remoteRI == none) return false;
if(DoesDataExistLocally(ID)) return false;
remoteRI.ServerCreateData(V(ID), priority);
return true;
}
// Checks if server has data with a given name.
// Responds via calling 'DataExistResponse' event.
function DoesDataExistOnServer(string dataID){
if(remoteRI == none) return;
if(DoesDataExistLocally(dataID))
events.static.CallDataExistResponse(dataID, true);
else
remoteRI.ServerAskDataExist(V(dataID));
}
// Must be already connected to data to do this
function bool RequestWriteAccess(string dataID){
if(remoteRI == none) return false;
if(!DoesDataExistLocally(dataID)) return false;
remoteRI.ServerRequestWriteAccess(V(dataID));
return true;
}
function bool GiveupWriteAccess(string dataID){
local NiceClientData data;
if(remoteRI == none) return false;
if(!DoesDataExistLocally(dataID)) return false;
data = NiceClientData(GetData(dataID));
if(data == none || !data.HasWriteRights())
return false;
data.SetWriteRights(V(dataID), false);
remoteRI.ServerGiveupWriteAccess(V(dataID));
return true;
}
// #private
function CheckinData(DataRef dataRef, bool replicationFinished){
local NiceClientData clientData;
// This shouldn't happen, but just in case
if(DoesDataExistLocally(dataRef.ID)) return;
// Create data as requested
clientData =
NiceClientData(class'NiceClientData'.static.NewData(dataRef.ID));
if(clientData == none)
return;
localStorage[localStorage.length] = clientData;
clientData.SetOwnerStorage(dataRef, self);
clientData.SetUpToDate(dataRef, replicationFinished);
}
// #private
function CheckinBool(DataRef dataRef, bool value, bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetBool(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallBoolVariableUpdated(dataRef.ID, dataRef.variable, value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
function CheckinByte(DataRef dataRef, byte value, bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetByte(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallByteVariableUpdated(dataRef.ID, dataRef.variable, value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
function CheckinInt(DataRef dataRef, int value, bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetInt(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallIntVariableUpdated(dataRef.ID, dataRef.variable, value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
function CheckinFloat(DataRef dataRef, float value, bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetFloat(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallFloatVariableUpdated(dataRef.ID, dataRef.variable, value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
function CheckinString(DataRef dataRef, string value, bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetString(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallStringVariableUpdated(dataRef.ID, dataRef.variable,
value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
function CheckinClass( DataRef dataRef, class<Actor> value,
bool replicationFinished){
local NiceClientData clientData;
clientData = NiceClientData(GetData(dataRef.ID));
if(clientData == none)
return;
clientData.SetUpToDate(dataRef, replicationFinished);
clientData._SetClass(dataRef, value);
// Events
events.static.CallVariableUpdated(dataRef.ID, dataRef.variable);
events.static.CallClassVariableUpdated(dataRef.ID, dataRef.variable, value);
if(replicationFinished)
events.static.CallDataUpToDate(dataRef.ID);
}
// NICETODO: to debug, remove later
function Print(NicePlayerController pc){
local int i, j;
local array<string> names;
for(i = 0;i < localStorage.length;i ++){
pc.ClientMessage("Data:"@localStorage[i].GetID());
names = localStorage[i].GetVariableNames();
for(j = 0;j < names.length;j ++){
pc.ClientMessage(">" @ names[j] @ " = " @ String(localStorage[i].GetInt(names[j])));
}
}
}
defaultproperties
{
dataClass=class'NiceClientData'
}