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
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
|
|
|