You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

479 lines
15 KiB

/*==LICENSE==*
CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011 Cyan Worlds, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
You can contact Cyan Worlds, Inc. by email legal@cyan.com
or by snail mail at:
Cyan Worlds, Inc.
14617 N Newport Hwy
Mead, WA 99021
*==LICENSE==*/
/*****************************************************************************
*
* $/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h
*
***/
#ifdef CLIENT
#ifdef PLASMA20_SOURCES_PLASMA_PUBUTILLIB_PLVAULT_PLVAULTCLIENTAPI_H
#error "Header $/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultClientApi.h included more than once"
#endif
#define PLASMA20_SOURCES_PLASMA_PUBUTILLIB_PLVAULT_PLVAULTCLIENTAPI_H
/*****************************************************************************
*
* VaultCallback
*
***/
struct RelVaultNode;
struct VaultCallback {
struct IVaultCallback * internal;
virtual void AddedChildNode (
RelVaultNode * parent,
RelVaultNode * child
) = 0;
virtual void RemovingChildNode (
RelVaultNode * parent,
RelVaultNode * child
) = 0;
virtual void ChangedNode (
RelVaultNode * changedNode
) = 0;
};
void VaultRegisterCallback (VaultCallback * cb);
void VaultUnregisterCallback (VaultCallback * cb);
/*****************************************************************************
*
* RelVaultNode
* A "relational" vault node (contains child and parent node linkage)
*
* NOTE: This API is not thread-safe and therefore not suitable for use
* in server applications.
*
***/
struct RelVaultNode : NetVaultNode {
struct IRelVaultNode * state;
RelVaultNode ();
~RelVaultNode ();
bool IsParentOf (unsigned nodeId, unsigned maxDepth);
bool IsChildOf (unsigned nodeId, unsigned maxDepth);
void GetRootIds (ARRAY(unsigned) * nodeIds);
unsigned RemoveChildNodes (unsigned maxDepth); // returns # of nodes removed
void GetChildNodeIds (
ARRAY(unsigned) * nodeIds,
unsigned maxDepth
);
void GetParentNodeIds (
ARRAY(unsigned) * nodeIds,
unsigned maxDepth
);
void GetMatchingChildNodeIds (
NetVaultNode * templateNode,
ARRAY(unsigned) * nodeIds,
unsigned maxDepth
);
void GetMatchingParentNodeIds (
NetVaultNode * templateNode,
ARRAY(unsigned) * nodeIds,
unsigned maxDepth
);
// returns first matching node found
RelVaultNode * GetParentNodeIncRef (
NetVaultNode * templateNode,
unsigned maxDepth
);
RelVaultNode * GetChildNodeIncRef (
NetVaultNode * templateNode,
unsigned maxDepth
);
RelVaultNode * GetChildNodeIncRef (
unsigned nodeType,
unsigned maxDepth
);
RelVaultNode * GetChildFolderNodeIncRef (
unsigned folderType,
unsigned maxDepth
);
RelVaultNode * GetChildPlayerInfoListNodeIncRef (
unsigned folderType,
unsigned maxDepth
);
RelVaultNode * GetChildAgeInfoListNodeIncRef (
unsigned folderType,
unsigned maxDepth
);
// returns all matching nodes found
void GetChildNodesIncRef (
unsigned maxDepth,
ARRAY(RelVaultNode*) * nodes
);
void GetChildNodesIncRef (
NetVaultNode * templateNode,
unsigned maxDepth,
ARRAY(RelVaultNode*) * nodes
);
void GetChildNodesIncRef (
unsigned nodeType,
unsigned maxDepth,
ARRAY(RelVaultNode*) * nodes
);
void GetChildFolderNodesIncRef (
unsigned folderType,
unsigned maxDepth,
ARRAY(RelVaultNode*) * nodes
);
unsigned GetRefOwnerId (unsigned parentId);
bool BeenSeen (unsigned parentId) const;
void SetSeen (unsigned parentId, bool seen);
// logging
void Print (const wchar tag[], FStateDump dumpProc, unsigned level);
void PrintTree (FStateDump dumpProc, unsigned level);
// AgeInfoNode-specific (and it checks!)
RelVaultNode * GetParentAgeLinkIncRef ();
};
/*****************************************************************************
*
* Vault Initialize
*
***/
void VaultInitialize ();
void VaultDestroy ();
void VaultUpdate ();
/*****************************************************************************
*
* Generic vault access
*
***/
RelVaultNode * VaultGetNodeIncRef (
unsigned nodeId
);
RelVaultNode * VaultGetNodeIncRef (
NetVaultNode * templateNode
);
// VaultAddChildNode will download the child node if necessary
// the parent exists locally before making the callback.
typedef void (*FVaultAddChildNodeCallback)(
ENetError result,
void * param
);
void VaultAddChildNode (
unsigned parentId,
unsigned childId,
unsigned ownerId,
FVaultAddChildNodeCallback callback, // optional
void * param // optional
);
void VaultAddChildNodeAndWait (
unsigned parentId,
unsigned childId,
unsigned ownerId
);
typedef void (*FVaultRemoveChildNodeCallback)(
ENetError result,
void * param
);
void VaultRemoveChildNode (
unsigned parentId,
unsigned childId,
FVaultRemoveChildNodeCallback callback,
void * param
);
void VaultSetNodeSeen (
unsigned nodeId,
bool seen
);
void VaultDeleteNode (
unsigned nodeId
);
void VaultPublishNode (
unsigned nodeId,
const wchar deviceName[]
);
void VaultSendNode (
RelVaultNode* srcNode,
unsigned dstPlayerId
);
typedef void (*FVaultCreateNodeCallback)(
ENetError result,
void * state,
void * param,
RelVaultNode * node
);
void VaultCreateNode ( // non-blocking
plVault::NodeTypes nodeType,
FVaultCreateNodeCallback callback,
void * state,
void * param
);
void VaultCreateNode ( // non-blocking
NetVaultNode * templateNode,
FVaultCreateNodeCallback callback,
void * state,
void * param
);
RelVaultNode * VaultCreateNodeAndWaitIncRef ( // block until completion. returns node. nil --> failure
plVault::NodeTypes nodeType,
ENetError * result
);
RelVaultNode * VaultCreateNodeAndWaitIncRef ( // block until completion. returns node. nil --> failure
NetVaultNode * templateNode,
ENetError * result
);
void VaultForceSaveNodeAndWait (
NetVaultNode * node
);
typedef void (*FVaultFindNodeCallback)(
ENetError result,
void * param,
unsigned nodeIdCount,
const unsigned nodeIds[]
);
void VaultFindNodes (
NetVaultNode * templateNode,
FVaultFindNodeCallback callback,
void * param
);
void VaultFindNodesAndWait (
NetVaultNode * templateNode,
ARRAY(unsigned) * nodeIds
);
void VaultLocalFindNodes (
NetVaultNode * templateNode,
ARRAY(unsigned) * nodeIds
);
void VaultFetchNodesAndWait ( // Use VaultGetNodeIncRef to access the fetched nodes
const unsigned nodeIds[],
unsigned count,
bool force = false
);
typedef void (*FVaultInitAgeCallback)(
ENetError result,
void * state,
void * param,
unsigned ageVaultId,
unsigned ageInfoVaultId
);
void VaultInitAge (
const class plAgeInfoStruct * info,
const Uuid & parentAgeInstId,
FVaultInitAgeCallback callback,
void * state,
void * param
);
/*****************************************************************************
*
* Player Vault Access
*
***/
unsigned VaultGetPlayerId ();
RelVaultNode * VaultGetPlayerNodeIncRef ();
RelVaultNode * VaultGetPlayerInfoNodeIncRef ();
RelVaultNode * VaultGetAvatarOutfitFolderIncRef ();
RelVaultNode * VaultGetAvatarClosetFolderIncRef ();
bool VaultGetLinkToMyNeighborhood (plAgeLinkStruct * link);
bool VaultGetLinkToMyPersonalAge (plAgeLinkStruct * link);
bool VaultGetLinkToCity (plAgeLinkStruct * link);
RelVaultNode * VaultGetAgesIOwnFolderIncRef ();
RelVaultNode * VaultGetAgesICanVisitFolderIncRef ();
RelVaultNode * VaultGetPlayerInboxFolderIncRef ();
RelVaultNode * VaultGetOwnedAgeLinkIncRef (const plAgeInfoStruct * info);
RelVaultNode * VaultGetOwnedAgeInfoIncRef (const plAgeInfoStruct * info);
bool VaultGetOwnedAgeLink (const plAgeInfoStruct * info, plAgeLinkStruct * link);
bool VaultAddOwnedAgeSpawnPoint (const Uuid & ageInstId, const plSpawnPointInfo & spawnPt);
bool VaultSetOwnedAgePublicAndWait (const plAgeInfoStruct * info, bool publicOrNot);
RelVaultNode * VaultGetVisitAgeLinkIncRef (const plAgeInfoStruct * info);
bool VaultGetVisitAgeLink (const plAgeInfoStruct * info, class plAgeLinkStruct * link);
bool VaultRegisterOwnedAgeAndWait (const plAgeLinkStruct * link);
bool VaultRegisterVisitAgeAndWait (const plAgeLinkStruct * link);
bool VaultUnregisterOwnedAgeAndWait (const plAgeInfoStruct * info);
bool VaultUnregisterVisitAgeAndWait (const plAgeInfoStruct * info);
RelVaultNode * VaultFindChronicleEntryIncRef (const wchar entryName[], int entryType = -1);
bool VaultHasChronicleEntry (const wchar entryName[], int entryType = -1);
// if entry of same name and type already exists, value is updated
void VaultAddChronicleEntryAndWait (
const wchar entryName[],
int entryType,
const wchar entryValue[]
);
bool VaultAmIgnoringPlayer (unsigned playerId);
unsigned VaultGetKILevel ();
bool VaultGetCCRStatus (); // true=online, false=away
bool VaultSetCCRStatus (bool online); // true=online, false=away
void VaultDump (const wchar tag[], unsigned vaultId, FStateDump dumpProc);
void VaultDump (const wchar tag[], unsigned vaultId);
bool VaultAmInMyPersonalAge ();
bool VaultAmInMyNeighborhoodAge ();
bool VaultAmOwnerOfCurrentAge ();
bool VaultAmCzarOfCurrentAge ();
bool VaultAmOwnerOfAge (const Uuid & ageInstId);
bool VaultAmCzarOfAge (const Uuid & ageInstId);
bool VaultRegisterMTStationAndWait (
const wchar stationName[],
const wchar linkBackSpawnPtObjName[]
);
void VaultProcessPlayerInbox ();
/*****************************************************************************
*
* Age Vault Access
*
***/
#define DEFAULT_DEVICE_INBOX L"DevInbox"
RelVaultNode * VaultGetAgeNodeIncRef ();
RelVaultNode * VaultGetAgeInfoNodeIncRef ();
RelVaultNode * VaultGetAgeChronicleFolderIncRef ();
RelVaultNode * VaultGetAgeDevicesFolderIncRef ();
RelVaultNode * VaultGetAgeSubAgesFolderIncRef ();
RelVaultNode * VaultGetAgeChildAgesFolderIncRef ();
RelVaultNode * VaultGetAgeAgeOwnersFolderIncRef ();
RelVaultNode * VaultGetAgeCanVisitFolderIncRef ();
RelVaultNode * VaultGetAgePeopleIKnowAboutFolderIncRef ();
RelVaultNode * VaultGetAgePublicAgesFolderIncRef ();
RelVaultNode * VaultAgeGetBookshelfFolderIncRef ();
RelVaultNode * VaultFindAgeSubAgeLinkIncRef (const plAgeInfoStruct * info);
RelVaultNode * VaultFindAgeChildAgeLinkIncRef (const plAgeInfoStruct * info);
RelVaultNode * VaultFindAgeChronicleEntryIncRef (const wchar entryName[], int entryType = -1);
// if entry of same name and type already exists, value is updated
void VaultAddAgeChronicleEntry (
const wchar entryName[],
int entryType,
const wchar entryValue[]
);
RelVaultNode * VaultAgeAddDeviceAndWaitIncRef (const wchar deviceName[]); // blocks until completion
void VaultAgeRemoveDevice (const wchar deviceName[]);
bool VaultAgeHasDevice (const wchar deviceName[]);
RelVaultNode * VaultAgeGetDeviceIncRef (const wchar deviceName[]);
RelVaultNode * VaultAgeSetDeviceInboxAndWaitIncRef (const wchar deviceName[], const wchar inboxName[]); // blocks until completion
RelVaultNode * VaultAgeGetDeviceInboxIncRef (const wchar deviceName[]);
void VaultClearDeviceInboxMap ();
bool VaultAgeGetAgeSDL (class plStateDataRecord * out);
void VaultAgeUpdateAgeSDL (const class plStateDataRecord * rec);
unsigned VaultAgeGetAgeTime ();
bool VaultAgeGetSubAgeLink (
const plAgeInfoStruct * info,
plAgeLinkStruct * link
);
bool VaultAgeFindOrCreateSubAgeLinkAndWait (
const plAgeInfoStruct * info,
plAgeLinkStruct * link,
const Uuid & parentAgeInstId
);
bool VaultAgeFindOrCreateChildAgeLinkAndWait (
const wchar parentAgeName[], // nil --> current age, non-nil --> owned age by given name
const plAgeInfoStruct * info,
plAgeLinkStruct * link
);
/*****************************************************************************
*
* CCR Vault Access
*
***/
void VaultCCRDumpPlayers();
/*****************************************************************************
*
* Vault download
*
***/
typedef void (*FVaultDownloadCallback)(
ENetError result,
void * param
);
typedef void (*FVaultProgressCallback)(
unsigned total,
unsigned curr,
void * param
);
void VaultDownload (
const wchar tag[],
unsigned vaultId,
FVaultDownloadCallback callback,
void * cbParam,
FVaultProgressCallback progressCallback,
void * cbProgressParam
);
void VaultDownloadAndWait (
const wchar tag[],
unsigned vaultId,
FVaultProgressCallback progressCallback,
void * cbProgressParam
);
void VaultCull (
unsigned vaultId
);
/*****************************************************************************
*
* Vault global node handling
*
***/
RelVaultNode * VaultGetSystemNodeIncRef ();
RelVaultNode * VaultGetGlobalInboxIncRef ();
#endif // def CLIENT