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.
 
 
 
 
 

1029 lines
32 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/>.
Additional permissions under GNU GPL version 3 section 7
If you modify this Program, or any covered work, by linking or
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
(or a modified version of those libraries),
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
licensors of this Program grant you additional
permission to convey the resulting work. Corresponding Source for a
non-source form of such a combination shall include the source code for
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
work.
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==*/
#if 0
#ifndef plVaultNode_h_inc
#define plVaultNode_h_inc
#include "hsTypes.h"
#include "hsBitVector.h"
#include "../plUnifiedTime/plUnifiedTime.h"
#include "../plNetCommon/plNetServerSessionInfo.h"
#include "../plNetCommon/plSpawnPointInfo.h"
#include "../plNetCommon/plNetCommon.h"
#include "../plUUID/plUUID.h"
#include "plVault.h"
#include "plVaultNodeIterator.h"
#include <string>
#include <vector>
////////////////////////////////////////////////////////////////////
class plVaultNode;
class plVaultFolderNode;
class plVaultImageNode;
class plVaultTextNoteNode;
class plVaultSDLNode;
class plVaultAgeLinkNode;
class plVaultChronicleNode;
class plVaultMgrNode;
class plVaultPlayerNode;
class plVaultPlayerInfoNode;
class plVaultPlayerInfoListNode;
class plVaultAgeNode;
class plVaultAgeInfoNode;
class plVaultAgeInfoListNode;
class plVaultSystemNode;
class plStateDataRecord;
class plURL;
struct hsPoint3;
////////////////////////////////////////////////////////////////////
typedef bool (*plNodeCompareProc)( const plVaultNode * A, const plVaultNode * B );
class plVaultNode
{
public:
struct MatchesNode
{
const plVaultNode * fNode;
MatchesNode( const plVaultNode * node ): fNode( node ) {}
bool operator()( const plVaultNode * node ) const;
};
friend struct MatchesNode;
void SetID( UInt32 v );
void SetType( UInt8 v );
void SetPermissions( UInt32 v );
void SetOwnerNodeID( UInt32 v );
void SetGroupNodeID( UInt32 v );
void SetCreatorNodeID( UInt32 v );
void SetCreateTime( const plUnifiedTime * v );
void SetCreateTime( const plUnifiedTime & v );
void SetCreateAgeTime( const plUnifiedTime * v );
void SetCreateAgeTime( const plUnifiedTime & v );
void SetCreateAgeName( const char * v );
void SetCreateAgeGuid( const plUUID * v );
void SetCreateAgeGuid( const plUUID & v );
void SetInt32_1( Int32 v );
void SetInt32_2( Int32 v );
void SetInt32_3( Int32 v );
void SetInt32_4( Int32 v );
void SetUInt32_1( UInt32 v );
void SetUInt32_2( UInt32 v );
void SetUInt32_3( UInt32 v );
void SetUInt32_4( UInt32 v );
void SetString64_1( const char * v );
void SetString64_2( const char * v );
void SetString64_3( const char * v );
void SetString64_4( const char * v );
void SetString64_5( const char * v );
void SetString64_6( const char * v );
void SetIString64_1( const char * v );
void SetIString64_2( const char * v );
void SetText_1( const char * v );
void SetText_2( const char * v );
void SetBlob_1_Guid( const plUUID * v );
void SetBlob_2_Guid( const plUUID * v );
void * AllocBufferBlob_1( int size );
void * AllocBufferBlob_2( int size );
UInt32 GetID () const;
UInt8 GetType () const;
UInt32 GetPermissions () const;
UInt32 GetOwnerNodeID () const;
const plVaultPlayerInfoNode * GetOwnerNode () const;
UInt32 GetGroupNodeID () const;
const plVaultNode * GetGroupNode () const;
const plUnifiedTime * GetModifyTime () const;
UInt32 GetCreatorNodeID () const;
const plVaultPlayerInfoNode * GetCreatorNode () const;
const plUnifiedTime * GetCreateTime () const;
const plUnifiedTime * GetCreateAgeTime () const;
const char * GetCreateAgeName () const;
const plUUID * GetCreateAgeGuid () const;
Int32 GetInt32_1 () const;
Int32 GetInt32_2 () const;
Int32 GetInt32_3 () const;
Int32 GetInt32_4 () const;
UInt32 GetUInt32_1 () const;
UInt32 GetUInt32_2 () const;
UInt32 GetUInt32_3 () const;
UInt32 GetUInt32_4 () const;
const char * GetString64_1 () const;
const char * GetString64_2 () const;
const char * GetString64_3 () const;
const char * GetString64_4 () const;
const char * GetString64_5 () const;
const char * GetString64_6 () const;
const char * GetIString64_1 () const;
const char * GetIString64_2 () const;
const char * GetText_1 () const;
const char * GetText_2 () const;
std::string & GetBlob_1 ();
const std::string & GetBlob_1 () const;
void * GetBufferBlob_1 () const;
int GetBufferSizeBlob_1 () const;
const plUUID * GetBlob_1_Guid () const;
std::string & GetBlob_2 ();
const std::string & GetBlob_2 () const;
void * GetBufferBlob_2 () const;
int GetBufferSizeBlob_2 () const;
const plUUID * GetBlob_2_Guid () const;
public:
plVaultNode();
virtual ~plVaultNode();
bool IsADownstreamNode( UInt32 nodeID ) const;
/////////////////////////////////////////////////
// Vault Node API
#if 0
// Add child node
plVaultNodeRef * AddNode(
plVaultNode * node,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Find matching node on server and add it to this node.
// Optionally don't fetch children of this node.
bool LinkToNode(
const plVaultNode * templateNode,
int childFetchLevel=plVault::kFetchAllChildren,
bool allowCreate=true,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
bool LinkToNode(
UInt32 nodeID,
int childFetchLevel=plVault::kFetchAllChildren,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Remove child node
bool RemoveNode( const plVaultNode * node,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
bool RemoveNode( UInt32 nodeID,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Remove all child nodes
void RemoveAllNodes( void );
// Add/Save this node to vault
virtual void Save(
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Save this node and all child nodes that need saving.
// NOTE: Currently, the cb object is called back for
// each node saved.
void SaveAll(
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Send this node to the destination client node. will be received in it's inbox folder.
void SendTo(
UInt32 destClientNodeID,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
#endif
// Get an iterator to this node's children
plVaultNodeIterator GetIterator( void );
#if 0
// Get child node count
int GetNodeCount( void ) const { return fChildNodes.size(); }
// Get all child nodes.
void GetNodes( plVault::NodeRefVec & out );
// Get child node by ID
bool GetNode( UInt32 nodeID, plVaultNodeRef *& out ) const;
// Get child node matching template node
bool FindNode( const plVaultNode * templateNode, plVaultNodeRef *& out ) const;
// Get all matching child nodes
bool FindNodes( const plVaultNode * templateNode, plVault::NodeRefVec & out ) const;
// Get first matching node recursively among children
bool FindNodeRecurse( const plVaultNode * templateNode, plVaultNodeRef *& out ) const;
// Returns true if node is a child of this node
bool HasNode( UInt32 nodeID );
bool HasNode( const plVaultNode * templateNode );
// true if node needs saving
bool Modified( void ) const;
void SetModified( bool b );
// Get the client ID from my Vault client.
UInt32 GetClientID( void ) const;
// application data keyed to this node. not stored.
void SetUserData( UInt32 v ) { fUserData=v; }
UInt32 GetUserData( void ) const { return fUserData; }
#endif
/////////////////////////////////////////////////
#if 0
void Read( hsStream * s, hsResMgr * mgr );
void Write( hsStream * s, hsResMgr * mgr );
virtual void CopyFrom( const plVaultNode * other, bool forceCopyAllFields=false );
virtual std::string AsStdString( int level=0 ) const;
std::string FieldsAsStdString( void ) const;
void Dump( int level=0, bool displaySeen=false, bool beenSeen=true, plStatusLog * log=nil ) const;
void GetChildNodes( const plVault::NodeRefVec *& out ) const { out=&fChildNodes; }
virtual std::string AsHtmlForm( const char * action ) { return ""; }
bool FromHtmlPost( plURL & url ) { return false; }
#endif
private:
plVaultNode( const plVaultNode & );
plVaultNode & operator =( const plVaultNode & );
};
//============================================================================
//============================================================================
//============================================================================
//============================================================================
#if 0
////////////////////////////////////////////////////////////////////
class plVaultFolderNode : public plVaultNode
{
public:
enum FieldMap
{
kFolderType = kInt32_1,
kFolderName = kString64_1,
};
plVaultFolderNode();
~plVaultFolderNode();
CLASSNAME_REGISTER( plVaultFolderNode );
GETINTERFACE_ANY( plVaultFolderNode, plVaultNode );
void SetFolderType( int type ) { ISetInt32_1( type ); }
int GetFolderType( void ) const { return IGetInt32_1();}
void SetFolderName( const char * v ) { ISetString64_1( v ); }
const char * GetFolderName( void ) const{ return IGetString64_1();}
std::string AsStdString( int level=0 ) const;
std::string AsHtmlForm( const char * action );
};
////////////////////////////////////////////////////////////////////
class plMipmap;
class plVaultImageNode : public plVaultNode
{
friend class plNetClientVNodeMgr;
plMipmap * fMipmap;
void ISetMipmap( plMipmap * v ) { fMipmap=v; }
plMipmap * IGetMipmap( void ) const { return fMipmap; }
public:
enum FieldMap
{
kImageType = kInt32_1,
kImageTitle = kString64_1,
kImageData = kBlob_1,
};
enum ImageTypes { kJPEG=1 };
plVaultImageNode();
~plVaultImageNode();
CLASSNAME_REGISTER( plVaultImageNode );
GETINTERFACE_ANY( plVaultImageNode, plVaultNode );
const plMipmap * GetMipmap( void ) const { return fMipmap; }
// this override copies the mipmap ptr too.
void CopyFrom( const plVaultNode * other, bool forceCopyAllFields=false );
void SetImageType( int type ) { ISetInt32_1( type ); }
int GetImageType( void ) const { return IGetInt32_1(); }
void * AllocBuffer( int size ) { return IAllocBufferBlob_1( size ); }
void * GetBuffer( void ) const { return IGetBufferBlob_1(); }
int GetBufSize() const { return IGetBufferSizeBlob_1(); }
void SetTitle( const char * text ) { ISetString64_1( text ); }
const char * GetTitle( void ) const { return IGetString64_1(); }
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultTextNoteNode : public plVaultNode
{
public:
enum FieldMap
{
kNoteType = kInt32_1,
kNoteSubType = kInt32_2,
kNoteTitle = kString64_1,
kNoteText = kBlob_1,
};
plVaultTextNoteNode();
~plVaultTextNoteNode();
CLASSNAME_REGISTER( plVaultTextNoteNode );
GETINTERFACE_ANY( plVaultTextNoteNode, plVaultNode );
void SetText( const char * text );
const char * GetText( void ) const { return IGetBlob_1().c_str(); }
void SetTitle( const char * text ) { ISetString64_1( text ); }
const char * GetTitle( void ) const { return IGetString64_1(); }
void SetNoteType( Int32 type ) { ISetInt32_1( type ); }
Int32 GetNoteType( void ) const { return IGetInt32_1(); }
void SetNoteSubType( Int32 type ) { ISetInt32_2( type ); }
Int32 GetNoteSubType( void ) const { return IGetInt32_2(); }
// Device-specific:
plVaultFolderNode * GetDeviceInbox() const;
void SetDeviceInbox( const char * inboxName,
plVaultOperationCallback * cb=nil, UInt32 cbContext=0 );
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultSDLNode : public plVaultNode
{
mutable plStateDataRecord * fSDLDataRec; // for GetStateDataRecord()
public:
enum FieldMap
{
kName = kString64_1,
kIdent = kInt32_1, // pgmr-defined, from plVault::StandardNodes enum.
kSDLData = kBlob_1,
};
plVaultSDLNode();
~plVaultSDLNode();
CLASSNAME_REGISTER( plVaultSDLNode );
GETINTERFACE_ANY( plVaultSDLNode, plVaultNode );
void SetIdent( int v ) { ISetInt32_1( v ); }
int GetIdent() const { return IGetInt32_1(); }
void * AllocBuffer( int size ) { return IAllocBufferBlob_1( size ); }
void * GetBuffer( void ) const { return IGetBufferBlob_1(); }
int GetBufSize() const { return IGetBufferSizeBlob_1(); }
plStateDataRecord * GetStateDataRecord( UInt32 readOptions=0 ) const; // returned pointer will be valid until next call to this fxn, or until this node instance goes away.
void SetStateDataRecord( const plStateDataRecord * rec, UInt32 writeOptions=0 );
void InitStateDataRecord( const char * sdlRecName, UInt32 writeOptions=0 );
void DumpStateDataRecord( const char * msg=nil, bool dirtyOnly=false ) const;
// override to dump debug info.
void Save(
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultAgeInfoNode : public plVaultNode
{
mutable plVaultPlayerInfoListNode * fCanVisitFolder;
mutable plVaultPlayerInfoListNode * fAgeOwnersFolder;
mutable plVaultSDLNode * fAgeSDL;
mutable plVaultFolderNode * fChildAgesFolder;
mutable plUUID fAgeInstanceGuid;
mutable plNetServerSessionInfo fServerInfo;
mutable plAgeInfoStruct fAgeInfoStruct;
/////////////////////////////////
friend class pyVault;
friend class pyAgeVault;
friend class plVaultAgeInfoInitializationTask;
plVaultSDLNode * IGetAgeSDL() const;
plVaultAgeLinkNode * IGetLink( plVaultFolderNode * folder, const plAgeInfoStruct * info ) const;
/////////////////////////////////
public:
enum FieldMap
{
kAgeFilename = kString64_1, // "Garden"
kAgeInstanceName = kString64_2, // "Eder Kemo"
kAgeUserDefinedName = kString64_3, // "Joe's"
kAgeInstanceGuid = kString64_4,
kAgeDescription = kText_1, // "Stay out!"
kAgeSequenceNumber = kInt32_1,
kIsPublic = kInt32_2,
kAgeLanguage = kInt32_3, // The language of the client that made this age
kAgeID = kUInt32_1,
kAgeCzarID = kUInt32_2,
kAgeInfoFlags = kUInt32_3,
};
enum AgeFlagBits // 32 bits max
{
kIsStartupNeighborhood = 1<<0,
};
plVaultAgeInfoNode();
~plVaultAgeInfoNode();
CLASSNAME_REGISTER( plVaultAgeInfoNode );
GETINTERFACE_ANY( plVaultAgeInfoNode, plVaultNode );
plVaultPlayerInfoListNode * GetCanVisitFolder() const;
plVaultPlayerInfoListNode * GetAgeOwnersFolder() const;
plVaultFolderNode * GetChildAgesFolder( void ) const;
plVaultAgeLinkNode * GetChildAgeLink( const plAgeInfoStruct * info ) const;
const plVaultSDLNode * GetAgeSDL() const { return IGetAgeSDL(); }
plVaultSDLNode * GetAgeSDL() { return IGetAgeSDL(); }
plVaultPlayerInfoNode * GetCzar() const;
const char * GetAgeFilename() const { return IGetString64_1(); }
void SetAgeFilename( const char * v ) { ISetString64_1( v ); }
const char * GetAgeInstanceName() const { return IGetString64_2(); }
void SetAgeInstanceName( const char * v ) { ISetString64_2( v ); }
const char * GetAgeUserDefinedName() const { return IGetString64_3(); }
void SetAgeUserDefinedName( const char * v ) { ISetString64_3( v ); }
const plUUID * GetAgeInstanceGuid() const { fAgeInstanceGuid.FromString( IGetString64_4() ); return &fAgeInstanceGuid; }
void SetAgeInstanceGuid( const plUUID * guid ) { fAgeInstanceGuid.CopyFrom( guid ); ISetString64_4( fAgeInstanceGuid.AsString() ); }
const char * GetAgeDescription() const { return IGetText_1(); }
void SetAgeDescription( const char * v ) { ISetText_1( v ); }
Int32 GetSequenceNumber() const { return IGetInt32_1(); }
void SetSequenceNumber( Int32 v ) { ISetInt32_1( v ); }
UInt32 GetAgeID() const { return IGetUInt32_1(); }
void SetAgeID( UInt32 v ) { ISetUInt32_1( v ); }
// aka mayor
UInt32 GetCzarID() const { return IGetUInt32_2(); }
void SetCzarID( UInt32 v ) { ISetUInt32_2( v ); }
bool IsPublic() const { return ( IGetInt32_2()!=0 ); }
// no glue for this one. Use plVaultAgeMgr::SetAgePublic() instead.
void ISetPublic( bool v ) { ISetInt32_2( v ); }
Int32 GetAgeLanguage() const { return IGetInt32_3(); }
void SetAgeLanguage( Int32 v ) { ISetInt32_3( v ); }
bool GetAgeFlag( UInt32 bit ) const { return ( IGetUInt32_3()&bit )!=0; }
void SetAgeFlag( UInt32 bit, bool on=true )
{ if ( on ) ISetUInt32_3( IGetUInt32_3()|bit );
else ISetUInt32_3( IGetUInt32_3()&~bit );
}
// helpers for linking.
const plNetServerSessionInfo * AsServerInfo() const;
const plAgeInfoStruct * AsAgeInfoStruct() const;
// helpers for init
void FromAgeInfoStruct( const plAgeInfoStruct * ageInfo );
// other helpers
const char * GetDisplayName() const;
// debug
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultAgeInfoListNode : public plVaultFolderNode
{
public:
enum FieldMap
{
};
plVaultAgeInfoListNode();
~plVaultAgeInfoListNode();
CLASSNAME_REGISTER( plVaultAgeInfoListNode );
GETINTERFACE_ANY( plVaultAgeInfoListNode, plVaultFolderNode );
bool HasAge( UInt32 AgeID );
bool AddAge( UInt32 AgeID );
void RemoveAge( UInt32 AgeID );
};
////////////////////////////////////////////////////////////////////
class plVaultAgeLinkNode : public plVaultNode
{
mutable plVaultAgeInfoNode * fAgeInfo;
public:
enum FieldMap
{
kLocked = kInt32_1, // locked on psnl bookshelf
kVolatile = kInt32_2, // volatile on psnl bookshelf
kSpawnPoints = kBlob_1, // aka treasure stones.
};
plVaultAgeLinkNode();
~plVaultAgeLinkNode();
CLASSNAME_REGISTER( plVaultAgeLinkNode );
GETINTERFACE_ANY( plVaultAgeLinkNode, plVaultNode );
plVaultAgeInfoNode * GetAgeInfo() const;
void SetAgeInfo( plVaultAgeInfoNode * v );
// locked on psnl age bookshelf
void SetLocked( bool v ) { ISetInt32_1( v?1:0 ); }
bool GetLocked() const { return ( IGetInt32_1()!=0 ); }
// volatile on psnl age bookshelf
void SetVolatile( bool v ) { ISetInt32_2( v?1:0 ); }
bool GetVolatile() const { return ( IGetInt32_2()!=0 ); }
// spawn points
void AddSpawnPoint( const plSpawnPointInfo & point ); // will only add if not there already.
void RemoveSpawnPoint( const char * spawnPtName );
bool HasSpawnPoint( const char * spawnPtName ) const;
bool HasSpawnPoint( const plSpawnPointInfo & point ) const; // compares spawn name only, not title.
void GetSpawnPoints( plSpawnPointVec & out ) const;
void SetSpawnPoints( const plSpawnPointVec & in );
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultChronicleNode : public plVaultNode
{
public:
enum FieldMap
{
kEntryType = kInt32_1,
kEntryName = kString64_1,
kEntryValue = kText_1,
};
plVaultChronicleNode();
~plVaultChronicleNode();
CLASSNAME_REGISTER( plVaultChronicleNode );
GETINTERFACE_ANY( plVaultChronicleNode, plVaultNode );
void SetName( const char * text ) { ISetString64_1( text ); }
const char * GetName( void ) const { return IGetString64_1(); }
void SetValue( const char * text ) { ISetText_1( text ); }
const char * GetValue( void ) const { return IGetText_1(); }
void SetEntryType( UInt32 type ) { ISetInt32_1( type ); }
UInt32 GetEntryType( void ) const { return IGetInt32_1(); }
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultPlayerInfoNode : public plVaultNode
{
mutable plUUID fGuid; // used with GetAgeGuid() only.
public:
enum FieldMap
{
kPlayerID = kUInt32_1,
kPlayerName = kIString64_1,
kAgeInstanceName = kString64_1, // name of age player is currently in
kAgeInstanceGuid = kString64_2, // guid of age player is currently in
kOnline = kInt32_1, // whether or not player is online
};
plVaultPlayerInfoNode();
~plVaultPlayerInfoNode();
CLASSNAME_REGISTER( plVaultPlayerInfoNode );
GETINTERFACE_ANY( plVaultPlayerInfoNode, plVaultNode );
// player ID
void SetPlayerID( UInt32 v );
UInt32 GetPlayerID( void ) const { return IGetUInt32_1(); }
// player name
void SetPlayerName( const char * text );
const char * GetPlayerName( void ) const { return IGetIString64_1(); }
// age the player is currently in, if any.
void SetAgeInstanceName( const char * v );
const char * GetAgeInstanceName( void ) const;
void SetAgeGuid( const plUUID * v);
const plUUID * GetAgeGuid( void ) const;
// online status
void SetOnline( bool b );
bool IsOnline( void ) const { return IGetInt32_1()!=0; }
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultPlayerInfoListNode : public plVaultFolderNode
{
void ISortPlayers( plNodeRefCompareProc proc );
void ILocalNodeAdded( plVaultNodeRef * nodeRef );
public:
enum FieldMap
{
};
plVaultPlayerInfoListNode();
~plVaultPlayerInfoListNode();
CLASSNAME_REGISTER( plVaultPlayerInfoListNode );
GETINTERFACE_ANY( plVaultPlayerInfoListNode, plVaultFolderNode );
bool HasPlayer( UInt32 playerID );
bool AddPlayer( UInt32 playerID );
void RemovePlayer( UInt32 playerID );
plVaultPlayerInfoNode * GetPlayer( UInt32 playerID );
void SetPlayers( const plVault::IDVec & playerIDs );
void SortBy( plNodeRefCompareProc proc ) { ISortPlayers( proc ); }
void Sort();
};
////////////////////////////////////////////////////////////////////
class plVaultMgrNode : public plVaultNode
{
friend class plVaultServer;
friend class plVaultConnectTask;
friend class plVNodeMgrInitializationTask;
mutable plVaultFolderNode * fMyInboxFolder;
mutable plVaultSystemNode * fSystemNode;
public:
enum FieldMap
{
};
plVaultMgrNode();
~plVaultMgrNode();
CLASSNAME_REGISTER( plVaultMgrNode );
GETINTERFACE_ANY( plVaultMgrNode, plVaultNode );
plVaultFolderNode * GetInbox( void ) const;
plVaultSystemNode * GetSystemNode() const;
};
////////////////////////////////////////////////////////////////////
class plVaultPlayerNode : public plVaultMgrNode
{
mutable plVaultPlayerInfoNode * fPlayerInfo;
mutable plVaultFolderNode * fAvatarOutfitFolder;
mutable plVaultFolderNode * fAvatarClosetFolder;
mutable plVaultFolderNode * fChronicleFolder;
mutable plVaultFolderNode * fAgeJournalsFolder;
mutable plVaultPlayerInfoListNode * fIgnoreListFolder;
mutable plVaultPlayerInfoListNode * fBuddyListFolder;
mutable plVaultPlayerInfoListNode * fPeopleIKnowAboutFolder;
mutable plVaultFolderNode * fAgesICanVisitFolder;
mutable plVaultFolderNode * fAgesIOwnFolder;
mutable plVaultFolderNode * fInviteFolder;
mutable plUUID fAcctUUID;
plVaultAgeLinkNode * IFindLink( plVaultFolderNode * folder, const plAgeInfoStruct * info ) const;
void IRemoveLink( plVaultFolderNode * folder, const plUUID * guid );
public:
enum FieldMap
{
kPlayerName = kIString64_1,
kAvatarShapeName = kString64_1,
kDisabled = kInt32_2,
kOnlineTime = kUInt32_2, // seconds
kAccountUUID = kIString64_2,
};
plVaultPlayerNode();
~plVaultPlayerNode();
CLASSNAME_REGISTER( plVaultPlayerNode );
GETINTERFACE_ANY( plVaultPlayerNode, plVaultMgrNode );
plVaultPlayerInfoNode * GetPlayerInfo( void ) const;
plVaultFolderNode * GetAvatarOutfitFolder( void ) const;
plVaultFolderNode * GetAvatarClosetFolder( void ) const;
plVaultFolderNode * GetChronicleFolder( void ) const;
plVaultFolderNode * GetAgeJournalsFolder( void ) const;
plVaultPlayerInfoListNode * GetIgnoreListFolder( void ) const;
plVaultPlayerInfoListNode * GetBuddyListFolder( void ) const;
plVaultPlayerInfoListNode * GetPeopleIKnowAboutFolder( void ) const;
plVaultFolderNode * GetAgesICanVisitFolder( void ) const;
plVaultFolderNode * GetAgesIOwnFolder( void ) const;
plVaultFolderNode * GetInviteFolder( void ) const;
plVaultAgeLinkNode * GetLinkToMyNeighborhood() const;
plVaultAgeLinkNode * GetLinkToCity() const;
///////////////
// Owned ages
plVaultAgeLinkNode * GetOwnedAgeLink( const plAgeInfoStruct * info, bool skipVolatile=false ) const;
void RemoveOwnedAgeLink( const plUUID * guid );
// Visit ages
plVaultAgeLinkNode * GetVisitAgeLink( const plAgeInfoStruct * info ) const;
void RemoveVisitAgeLink( const plUUID * guid );
///////////////
// Chronicle
plVaultChronicleNode * FindChronicleEntry( const char * entryName );
// player name
void SetPlayerName( const char * v );
const char * GetPlayerName( void ) const { return IGetIString64_1(); }
// avatar shape name
void SetAvatarShapeName( const char * v );
const char * GetAvatarShapeName( void ) const{return IGetString64_1(); }
// disabled?
void SetDisabled( bool v ) { ISetInt32_2( v ); }
bool IsDisabled( void ) const { return IGetInt32_2()!=0; }
// account ID
void SetAccountUUID( const plUUID * v );
const plUUID * GetAccountUUID( void ) const;
// online time accumulator (plUnifiedTime.GetSecs())
void SetOnlineTime( UInt32 v ) { ISetUInt32_2( v ); }
UInt32 GetOnlineTime( void ) const { return IGetUInt32_2(); }
void IncOnlineTime( UInt32 v ) { SetOnlineTime( GetOnlineTime()+v ); }
// override to also save player info node.
void Save(
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultAgeNode : public plVaultMgrNode
{
mutable plUUID fAgeGuid;
mutable plVaultAgeInfoNode * fAgeInfo;
mutable plVaultFolderNode * fAgeDevicesFolder;
mutable plVaultFolderNode * fSubAgesFolder;
mutable plVaultPlayerInfoListNode * fPeopleIKnowAboutFolder;
mutable plVaultFolderNode * fChronicleFolder;
// used only with personal ages
mutable plVaultFolderNode * fAgesIOwnFolder;
// used only with nexus age
mutable plVaultFolderNode * fPublicAgesFolder;
plVaultAgeLinkNode * IGetLink( plVaultFolderNode * folder, const plAgeInfoStruct * info ) const;
public:
enum FieldMap
{
kAgeGuid = kString64_1,
};
plVaultAgeNode();
~plVaultAgeNode();
CLASSNAME_REGISTER( plVaultAgeNode );
GETINTERFACE_ANY( plVaultAgeNode, plVaultMgrNode );
plVaultAgeInfoNode * GetAgeInfo() const;
plVaultFolderNode * GetAgeDevicesFolder( void ) const;
plVaultFolderNode * GetSubAgesFolder( void ) const;
// age chronicle
plVaultFolderNode * GetChronicleFolder( void ) const;
// People who have published to devices in this age
plVaultPlayerInfoListNode * GetPeopleIKnowAboutFolder( void ) const;
// PERSONAL AGE SPECIFIC
plVaultFolderNode * GetAgesIOwnFolder( void ) const;
// NEXUS AGE SPECIFIC
plVaultFolderNode * GetPublicAgesFolder( void ) const;
// To publish a node to a device, get its device inbox ID, then
// call node->SendTo( deviceInboxID );
plVaultAgeLinkNode * GetSubAgeLink( const plAgeInfoStruct * info ) const;
// AGE DEVICES. AKA IMAGERS, WHATEVER.
// Add a new device.
void AddDevice( const char * deviceName,
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
// Remove a device.
void RemoveDevice( const char * deviceName );
// True if device exists in age.
bool HasDevice( const char * deviceName );
// Get a device.
plVaultTextNoteNode * GetDevice( const char * deviceName );
// age guid
const plUUID * GetAgeGuid() const { fAgeGuid.FromString( IGetString64_1() ); return &fAgeGuid; }
void SetAgeGuid( const plUUID * guid );
// Age chronicle
plVaultChronicleNode * FindChronicleEntry( const char * entryName );
// override to also save age info node.
void Save(
plVaultOperationCallback * cb=nil,
UInt32 cbContext=0 );
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultAdminNode : public plVaultMgrNode
{
mutable plVaultFolderNode * fAllAgeSDLEventInboxesFolder;
public:
enum FieldMap
{
};
plVaultAdminNode();
~plVaultAdminNode();
CLASSNAME_REGISTER( plVaultAdminNode );
GETINTERFACE_ANY( plVaultAdminNode, plVaultMgrNode );
plVaultFolderNode * GetAllAgeSDLEventInboxesFolder( void ) const;
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
class plVaultMarkerNode : public plVaultNode
{
public:
enum FieldMap
{
kAgeName = kCreateAgeName,
kMarkerText = kText_1,
kGPSTorans = kInt32_1,
kGPSHSpans = kInt32_2,
kGPSVSpans = kInt32_3,
kMarkerPosX = kUInt32_1,
kMarkerPosY = kUInt32_2,
kMarkerPosZ = kUInt32_3,
};
plVaultMarkerNode();
~plVaultMarkerNode();
CLASSNAME_REGISTER(plVaultMarkerNode);
GETINTERFACE_ANY(plVaultMarkerNode, plVaultNode);
void SetAge(const char* ageName) { ISetCreateAgeName(ageName); }
const char* GetAge() const { return IGetCreateAgeName(); }
void SetPosition(const hsPoint3& pos);
hsPoint3 GetPosition() const;
void SetText(const char* text) { ISetText_1(text); }
const char* GetText() const { return IGetText_1(); }
void SetGPS(Int32 t, Int32 h, Int32 v) { ISetInt32_1(t);ISetInt32_2(h);ISetInt32_3(v); }
Int32 GetGPSTorans() const { return IGetInt32_1(); }
Int32 GetGPSHSpans() const { return IGetInt32_2(); }
Int32 GetGPSVSpans() const { return IGetInt32_3(); }
std::string AsStdString(int level=0) const;
};
////////////////////////////////////////////////////////////////////
class plVaultMarkerListNode : public plVaultFolderNode
{
public:
enum FieldMap
{
kOwnerID = kUInt32_1,
kOwnerName = kString64_2,
kGameType = kInt32_1,
kRoundLength = kInt32_2,
};
plVaultMarkerListNode();
~plVaultMarkerListNode();
CLASSNAME_REGISTER(plVaultMarkerListNode);
GETINTERFACE_ANY(plVaultMarkerListNode, plVaultFolderNode);
void SetOwnerName( const char * v ) { ISetString64_2( v ); }
const char * GetOwnerName( void ) const{ return IGetString64_2();}
Int32 GetGameType() const { return IGetInt32_1(); }
void SetGameType( Int32 v ) { ISetInt32_1( v ); }
Int32 GetRoundLength() const { return IGetInt32_2(); }
void SetRoundLength( Int32 v ) { ISetInt32_2( v ); }
std::string AsStdString(int level=0) const;
};
////////////////////////////////////////////////////////////////////
//
// A node that ALL vault mgrs get - for system wide info
//
class plVaultSystemNode : public plVaultNode
{
mutable plVaultFolderNode * fGlobalInboxFolder;
public:
enum FieldMap
{
kCCRAwayStatus = kInt32_1
};
plVaultSystemNode();
CLASSNAME_REGISTER( plVaultSystemNode);
GETINTERFACE_ANY( plVaultSystemNode, plVaultNode );
void SetCCRAwayStatus( bool b) { ISetInt32_1( b); }
int GetCCRAwayStatus( void ) const { return IGetInt32_1();}
plVaultFolderNode * GetGlobalInbox( void ) const;
std::string AsStdString( int level=0 ) const;
};
////////////////////////////////////////////////////////////////////
// Vault Server VNode
// Makes sure nodes like AllPlayers exist.
class plNetVaultServerNode : public plVaultMgrNode
{
friend class plNetVaultServerInitializationTask;
mutable plVaultAgeInfoNode * fCityInfo;
UInt32 fAllPlayersFolderID;
UInt32 fAllAgeGlobalSDLNodesFolderID;
UInt32 fPublicAgesFolderID;
public:
plNetVaultServerNode();
~plNetVaultServerNode();
CLASSNAME_REGISTER( plNetVaultServerNode );
GETINTERFACE_ANY( plNetVaultServerNode, plVaultMgrNode );
UInt32 GetAllPlayersFolderID() const { return fAllPlayersFolderID; }
UInt32 GetAllAgeGlobalSDLNodesFolderID() const { return fAllAgeGlobalSDLNodesFolderID; }
UInt32 GetPublicAgesFolderID() const { return fPublicAgesFolderID; }
std::string AsStdString( int level=0 ) const;
};
#endif // 0
//============================================================================
//============================================================================
//============================================================================
//============================================================================
#endif // plVaultNode_h_inc
#endif