/*==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 . 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 #include //////////////////////////////////////////////////////////////////// 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