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