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.
232 lines
7.8 KiB
232 lines
7.8 KiB
14 years ago
|
/*==LICENSE==*
|
||
|
|
||
|
CyanWorlds.com Engine - MMOG client, server and tools
|
||
|
Copyright (C) 2011 Cyan Worlds, Inc.
|
||
|
|
||
|
This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by
|
||
|
the Free Software Foundation, either version 3 of the License, or
|
||
|
(at your option) any later version.
|
||
|
|
||
|
This program is distributed in the hope that it will be useful,
|
||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
GNU General Public License for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public License
|
||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||
|
or by snail mail at:
|
||
|
Cyan Worlds, Inc.
|
||
|
14617 N Newport Hwy
|
||
|
Mead, WA 99021
|
||
|
|
||
|
*==LICENSE==*/
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
// pyVNodeMgr - python wrapper for plVNodeMgr class.
|
||
|
|
||
|
#ifndef pyVNodeMgr_h_inc
|
||
|
#define pyVNodeMgr_h_inc
|
||
|
|
||
|
#include "../plVault/plVaultClient.h"
|
||
|
#include "../plNetClientComm/plNetClientComm.h"
|
||
|
|
||
|
#include "../FeatureLib/pfPython/pyGlueHelpers.h"
|
||
|
#include <python.h>
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class pyVaultNode;
|
||
|
class pyVaultCallback;
|
||
|
class pyStatusLog;
|
||
|
class pyNetClientComm;
|
||
|
class pyVaultFolderNode;
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class pyVNodeMgr : public plVNodeMgr
|
||
|
{
|
||
|
private:
|
||
|
typedef std::vector<pyVaultCallback*> PyCallbackVec;
|
||
|
PyCallbackVec fPyCallbacks;
|
||
|
|
||
|
class VaultMsgHandler : public plNetClientComm::MsgHandler
|
||
|
{
|
||
|
private:
|
||
|
pyVNodeMgr * fMyVNodeMgr;
|
||
|
int HandleMessage( plNetMessage* msg );
|
||
|
public:
|
||
|
VaultMsgHandler(): fMyVNodeMgr(nil) {}
|
||
|
void setMgr(pyVNodeMgr * thaNodeMgr) {fMyVNodeMgr = thaNodeMgr;}
|
||
|
};
|
||
|
friend class VaultMsgHandler;
|
||
|
VaultMsgHandler fMsgHandler;
|
||
|
|
||
|
protected:
|
||
|
PyObject* fMyCommObj;
|
||
|
pyNetClientComm* fMyComm; // pointer to object stored in fMyCommObj
|
||
|
|
||
|
bool IAmOnline() const;
|
||
|
bool IIsThisMe( plVaultPlayerInfoNode* node ) const;
|
||
|
bool IIsThisMe( plVaultPlayerNode * node ) const;
|
||
|
int ISendNetMsg( plNetMsgVault* msg, UInt32 sendFlags=0 );
|
||
|
UInt32 IGetPlayerID() const;
|
||
|
|
||
|
pyVNodeMgr(): fMyComm(nil) {fMsgHandler.setMgr(this);} // for python glue only, do NOT call
|
||
|
pyVNodeMgr( PyObject* thaComm );
|
||
|
|
||
|
public:
|
||
|
~pyVNodeMgr();
|
||
|
|
||
|
void setMyComm(PyObject* thaComm); // for python glue only, do NOT call
|
||
|
|
||
|
// required functions for PyObject interoperability
|
||
|
PYTHON_EXPOSE_TYPE;
|
||
|
PYTHON_CLASS_NEW_FRIEND(ptVNodeMgr);
|
||
|
static PyObject* New(PyObject* thaComm);
|
||
|
PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyVNodeMgr object
|
||
|
PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyVNodeMgr); // converts a PyObject to a pyVNodeMgr (throws error if not correct type)
|
||
|
|
||
|
static void AddPlasmaClasses(PyObject *m);
|
||
|
|
||
|
PyObject * GetNetClient() const { Py_INCREF(fMyCommObj); return fMyCommObj; } // returns pyNetClientComm
|
||
|
|
||
|
/////////////////////////////////////////////////
|
||
|
// Vault Client API
|
||
|
|
||
|
int Update( double secs );
|
||
|
|
||
|
void Startup();
|
||
|
void Shutdown();
|
||
|
|
||
|
// connect/disconnect
|
||
|
bool IsConnected();
|
||
|
void Disconnect(
|
||
|
PyObject* cb=nil,
|
||
|
UInt32 cbContext=0 );
|
||
|
void Connect(
|
||
|
int childFetchLevel=plVault::kFetchAllChildren,
|
||
|
PyObject* cb=nil,
|
||
|
UInt32 cbContext=0 );
|
||
|
// TODO: Glue this.
|
||
|
// Fetch matching node from server and hold onto it.
|
||
|
// Note: You won't receive notifications about the fetched node or
|
||
|
// it's children until it has been added to your root node or any
|
||
|
// of it's children.
|
||
|
// bool FetchNode(
|
||
|
// pyVaultNode* templateNode,
|
||
|
// int childFetchLevel=plVault::kFetchAllChildren,
|
||
|
// bool allowCreate = false,
|
||
|
// PyObject* cb=nil,
|
||
|
// UInt32 cbContext=0 );
|
||
|
bool FetchNode( UInt32 nodeID,
|
||
|
int childFetchLevel=plVault::kFetchAllChildren,
|
||
|
PyObject* cb=nil,
|
||
|
UInt32 cbContext=0 );
|
||
|
|
||
|
// get our root node
|
||
|
PyObject* GetRootNode() const; // returns pyVaultNode
|
||
|
// get the client node ID returned to us by the server ( if we didn't
|
||
|
// fetch when we connected then we have to use this to identify ourselves ).
|
||
|
UInt32 GetClientID() const;
|
||
|
// search all nodes in client locally
|
||
|
PyObject* GetNode( UInt32 id ) const; // returns pyVaultNode
|
||
|
// TODO: Glue these.
|
||
|
PyObject* FindNode( pyVaultNode* templateNode ) const; // returns pyVaultNode
|
||
|
// bool FindNodes( const pyVaultNode* templateNode, PyObject * out ) const;
|
||
|
// callback management
|
||
|
bool EnableCallbacks( bool b ); // returns previous enabled setting.
|
||
|
void AddCallback( PyObject* cb );
|
||
|
void RemoveCallback( PyObject* cb );
|
||
|
|
||
|
// create a node of the given type.
|
||
|
PyObject* CreateNode( int nodeType, bool persistent ); // returns pyVaultNode
|
||
|
|
||
|
// dump contents to log
|
||
|
void Dump() const;
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class pyPlayerVNodeMgr : public pyVNodeMgr
|
||
|
{
|
||
|
protected:
|
||
|
bool IAmSuperUser( void ) const;
|
||
|
void IFillOutConnectFields( plNetMsgVault* msg ) const;
|
||
|
plVNodeInitTask * IGetNodeInitializationTask( plVaultNode * node );
|
||
|
|
||
|
pyPlayerVNodeMgr(): pyVNodeMgr() {} // for python glue only, do NOT call
|
||
|
pyPlayerVNodeMgr( PyObject* thaComm );
|
||
|
|
||
|
public:
|
||
|
// required functions for PyObject interoperability
|
||
|
PYTHON_CLASS_NEW_FRIEND(ptPlayerVNodeMgr);
|
||
|
static PyObject* New(PyObject* thaComm);
|
||
|
PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyPlayerVNodeMgr object
|
||
|
PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyPlayerVNodeMgr); // converts a PyObject to a pyPlayerVNodeMgr (throws error if not correct type)
|
||
|
|
||
|
static void AddPlasmaClasses(PyObject *m);
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class pyAgeVNodeMgr : public pyVNodeMgr
|
||
|
{
|
||
|
std::string fAgeFilename;
|
||
|
plServerGuid fAgeInstanceGuid;
|
||
|
|
||
|
protected:
|
||
|
bool IAmSuperUser( void ) const;
|
||
|
void IFillOutConnectFields( plNetMsgVault* msg ) const;
|
||
|
plVNodeInitTask * IGetNodeInitializationTask( plVaultNode * node );
|
||
|
|
||
|
pyAgeVNodeMgr(): pyVNodeMgr() {} // for python glue only, do NOT call
|
||
|
pyAgeVNodeMgr( PyObject* thaComm );
|
||
|
|
||
|
public:
|
||
|
// required functions for PyObject interoperability
|
||
|
PYTHON_CLASS_NEW_FRIEND(ptAgeVNodeMgr);
|
||
|
static PyObject* New(PyObject* thaComm);
|
||
|
PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyAgeVNodeMgr object
|
||
|
PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyAgeVNodeMgr); // converts a PyObject to a pyAgeVNodeMgr (throws error if not correct type)
|
||
|
|
||
|
static void AddPlasmaClasses(PyObject *m);
|
||
|
|
||
|
void SetAgeInfo( const char * ageFilename, const char * ageInstanceGuid );
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class pyAdminVNodeMgr : public pyVNodeMgr
|
||
|
{
|
||
|
private:
|
||
|
bool fWantGlobalSDL;
|
||
|
bool fWantAllPlayers;
|
||
|
|
||
|
protected:
|
||
|
bool IAmSuperUser( void ) const;
|
||
|
void IFillOutConnectFields( plNetMsgVault* msg ) const;
|
||
|
plVNodeInitTask * IGetNodeInitializationTask( plVaultNode * node );
|
||
|
|
||
|
pyAdminVNodeMgr(): pyVNodeMgr(), fWantGlobalSDL(true), fWantAllPlayers(false) {} // for python glue only, do NOT call
|
||
|
pyAdminVNodeMgr( PyObject* thaComm );
|
||
|
|
||
|
public:
|
||
|
// required functions for PyObject interoperability
|
||
|
PYTHON_CLASS_NEW_FRIEND(ptAdminVNodeMgr);
|
||
|
static PyObject* New(PyObject* thaComm);
|
||
|
PYTHON_CLASS_CHECK_DEFINITION; // returns true if the PyObject is a pyAdminVNodeMgr object
|
||
|
PYTHON_CLASS_CONVERT_FROM_DEFINITION(pyAdminVNodeMgr); // converts a PyObject to a pyAdminVNodeMgr (throws error if not correct type)
|
||
|
|
||
|
static void AddPlasmaClasses(PyObject *m);
|
||
|
|
||
|
void SetWantGlobalSDL( bool v ) { fWantGlobalSDL=v; }
|
||
|
void SetWantAllPlayers( bool v ) { fWantAllPlayers=v; }
|
||
|
|
||
|
PyObject * GetGlobalInbox() const; // returns pyVaultFolderNode
|
||
|
};
|
||
|
|
||
|
////////////////////////////////////////////////////////////////////
|
||
|
#endif // pyVNodeMgr_h_inc
|