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.
247 lines
8.9 KiB
247 lines
8.9 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==*/ |
|
//////////////////////////////////////////////////////////////////// |
|
// 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_t sendFlags=0 ); |
|
uint32_t 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_t cbContext=0 ); |
|
void Connect( |
|
int childFetchLevel=plVault::kFetchAllChildren, |
|
PyObject* cb=nil, |
|
uint32_t 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_t cbContext=0 ); |
|
bool FetchNode( uint32_t nodeID, |
|
int childFetchLevel=plVault::kFetchAllChildren, |
|
PyObject* cb=nil, |
|
uint32_t 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_t GetClientID() const; |
|
// search all nodes in client locally |
|
PyObject* GetNode( uint32_t 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
|
|
|