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.
 
 
 
 
 

155 lines
4.1 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/>.
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==*/
//////////////////////////////////////////////////////////////////////
//
// pyVaultPlayerInfoListNode - a wrapper class to provide interface to the RelVaultNode
//
//////////////////////////////////////////////////////////////////////
#include "pyVaultPlayerInfoListNode.h"
#ifndef BUILDING_PYPLASMA
#include "pyVault.h"
#endif
#include "pyVaultFolderNode.h"
#include "pyVaultPlayerInfoNode.h"
#include "pyVaultNodeRef.h"
#include "plVault/plVault.h"
#include <algorithm>
// should only be created from C++ side
pyVaultPlayerInfoListNode::pyVaultPlayerInfoListNode(RelVaultNode* nfsNode)
: pyVaultFolderNode(nfsNode)
{
}
//create from the Python side
pyVaultPlayerInfoListNode::pyVaultPlayerInfoListNode(int n)
: pyVaultFolderNode(n)
{
fNode->SetNodeType(plVault::kNodeType_PlayerInfoList);
}
//==================================================================
// class RelVaultNode : public plVaultFolderNode
//
hsBool pyVaultPlayerInfoListNode::HasPlayer( UInt32 playerID )
{
if (!fNode)
return false;
NetVaultNode * templateNode = NEWZERO(NetVaultNode);
templateNode->IncRef();
templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
VaultPlayerInfoNode access(templateNode);
access.SetPlayerId(playerID);
RelVaultNode * rvn = fNode->GetChildNodeIncRef(templateNode, 1);
if (rvn)
rvn->DecRef();
templateNode->DecRef();
return (rvn != nil);
}
hsBool pyVaultPlayerInfoListNode::AddPlayer( UInt32 playerID )
{
if (HasPlayer(playerID))
return true;
if (!fNode)
return false;
NetVaultNode * templateNode = NEWZERO(NetVaultNode);
templateNode->IncRef();
templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
VaultPlayerInfoNode access(templateNode);
access.SetPlayerId(playerID);
ARRAY(unsigned) nodeIds;
VaultLocalFindNodes(templateNode, &nodeIds);
if (!nodeIds.Count())
VaultFindNodesAndWait(templateNode, &nodeIds);
if (nodeIds.Count())
VaultAddChildNodeAndWait(fNode->nodeId, nodeIds[0], VaultGetPlayerId());
templateNode->DecRef();
return nodeIds.Count() != 0;
}
void pyVaultPlayerInfoListNode::RemovePlayer( UInt32 playerID )
{
if (!fNode)
return;
NetVaultNode * templateNode = NEWZERO(NetVaultNode);
templateNode->IncRef();
templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
VaultPlayerInfoNode access(templateNode);
access.SetPlayerId(playerID);
if (RelVaultNode * rvn = fNode->GetChildNodeIncRef(templateNode, 1)) {
VaultRemoveChildNode(fNode->nodeId, rvn->nodeId, nil, nil);
rvn->DecRef();
}
templateNode->DecRef();
}
PyObject * pyVaultPlayerInfoListNode::GetPlayer( UInt32 playerID )
{
if (!fNode)
PYTHON_RETURN_NONE;
NetVaultNode * templateNode = NEWZERO(NetVaultNode);
templateNode->IncRef();
templateNode->SetNodeType(plVault::kNodeType_PlayerInfo);
VaultPlayerInfoNode access(templateNode);
access.SetPlayerId(playerID);
PyObject * result = nil;
if (RelVaultNode * rvn = fNode->GetChildNodeIncRef(templateNode, 1)) {
result = pyVaultPlayerInfoNode::New(rvn);
rvn->DecRef();
}
templateNode->DecRef();
if (!result)
PYTHON_RETURN_NONE;
return result;
}
void pyVaultPlayerInfoListNode::Sort()
{
hsAssert(false, "eric, port me");
}