make it so assignment-clients runnings scripts can rez entities

This commit is contained in:
Seth Alves 2015-04-27 15:30:17 -07:00
parent c097a0038a
commit 2f36cd0fb0
5 changed files with 48 additions and 10 deletions

View file

@ -504,7 +504,11 @@ void DomainServer::populateStaticScriptedAssignmentsFromSettings() {
Assignment::AgentType,
scriptPool);
scriptAssignment->setPayload(scriptURL.toUtf8());
// we want a script added by the domain owner to be able to do what it wants with entities.
scriptAssignment->setCanRez(true);
scriptAssignment->setCanAdjustLocks(true);
// add it to static hash so we know we have to keep giving it back out
addStaticAssignmentToAssignmentHash(scriptAssignment);
}
@ -675,6 +679,12 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock
nodeData->setAssignmentUUID(matchingQueuedAssignment->getUUID());
nodeData->setWalletUUID(pendingAssigneeData->getWalletUUID());
// always allow assignment clients to create and destroy entities
nodeData->setCanAdjustLocks(true);
nodeData->setCanRez(true);
newNode->setCanAdjustLocks(true);
newNode->setCanRez(true);
// now that we've pulled the wallet UUID and added the node to our list, delete the pending assignee data
delete pendingAssigneeData;
}
@ -1052,7 +1062,9 @@ void DomainServer::readAvailableDatagrams() {
// add the information for that deployed assignment to the hash of pending assigned nodes
PendingAssignedNodeData* pendingNodeData = new PendingAssignedNodeData(assignmentToDeploy->getUUID(),
requestAssignment.getWalletUUID());
requestAssignment.getWalletUUID(),
true, true
);
_pendingAssignedNodes.insert(uniqueAssignment.getUUID(), pendingNodeData);
} else {
if (requestAssignment.getType() != Assignment::AgentType
@ -2119,10 +2131,10 @@ SharedAssignmentPointer DomainServer::deployableAssignmentForRequest(const Assig
Assignment* assignment = sharedAssignment->data();
bool requestIsAllTypes = requestAssignment.getType() == Assignment::AllTypes;
bool assignmentTypesMatch = assignment->getType() == requestAssignment.getType();
bool nietherHasPool = assignment->getPool().isEmpty() && requestAssignment.getPool().isEmpty();
bool neitherHasPool = assignment->getPool().isEmpty() && requestAssignment.getPool().isEmpty();
bool assignmentPoolsMatch = assignment->getPool() == requestAssignment.getPool();
if ((requestIsAllTypes || assignmentTypesMatch) && (nietherHasPool || assignmentPoolsMatch)) {
if ((requestIsAllTypes || assignmentTypesMatch) && (neitherHasPool || assignmentPoolsMatch)) {
// remove the assignment from the queue
SharedAssignmentPointer deployableAssignment = _unfulfilledAssignments.takeAt(sharedAssignment

View file

@ -11,9 +11,12 @@
#include "PendingAssignedNodeData.h"
PendingAssignedNodeData::PendingAssignedNodeData(const QUuid& assignmentUUID, const QUuid& walletUUID) :
PendingAssignedNodeData::PendingAssignedNodeData(const QUuid& assignmentUUID, const QUuid& walletUUID,
bool canAdjustLocks, bool canRez) :
_assignmentUUID(assignmentUUID),
_walletUUID(walletUUID)
_walletUUID(walletUUID),
_canAdjustLocks(canAdjustLocks),
_canRez(canRez)
{
}
}

View file

@ -18,16 +18,25 @@
class PendingAssignedNodeData : public QObject {
Q_OBJECT
public:
PendingAssignedNodeData(const QUuid& assignmentUUID, const QUuid& walletUUID);
PendingAssignedNodeData(const QUuid& assignmentUUID, const QUuid& walletUUID, bool canAdjustLocks, bool canRez);
void setAssignmentUUID(const QUuid& assignmentUUID) { _assignmentUUID = assignmentUUID; }
const QUuid& getAssignmentUUID() const { return _assignmentUUID; }
void setWalletUUID(const QUuid& walletUUID) { _walletUUID = walletUUID; }
const QUuid& getWalletUUID() const { return _walletUUID; }
void setCanAdjustLocks(bool canAdjustLocks) { _canAdjustLocks = canAdjustLocks; }
bool getCanAdjustLocks() { return _canAdjustLocks; }
void setCanRez(bool canRez) { _canRez = canRez; }
bool getCanRez() { return _canRez; }
private:
QUuid _assignmentUUID;
QUuid _walletUUID;
bool _canAdjustLocks = false; /// will this node be allowed to adjust locks on entities?
bool _canRez = false; /// will this node be allowed to rez in new entities?
};
#endif // hifi_PendingAssignedNodeData_h
#endif // hifi_PendingAssignedNodeData_h

View file

@ -153,6 +153,8 @@ QDataStream& operator<<(QDataStream &out, const Assignment& assignment) {
if (assignment._command == Assignment::RequestCommand) {
out << assignment._walletUUID;
}
out << assignment._canAdjustLocks << assignment._canRez;
return out;
}
@ -167,6 +169,8 @@ QDataStream& operator>>(QDataStream &in, Assignment& assignment) {
if (assignment._command == Assignment::RequestCommand) {
in >> assignment._walletUUID;
}
in >> assignment._canAdjustLocks >> assignment._canRez;
return in;
}

View file

@ -26,8 +26,18 @@ public:
QMutex& getMutex() { return _mutex; }
void setCanAdjustLocks(bool canAdjustLocks) { _canAdjustLocks = canAdjustLocks; }
bool getCanAdjustLocks() { return _canAdjustLocks; }
void setCanRez(bool canRez) { _canRez = canRez; }
bool getCanRez() { return _canRez; }
private:
QMutex _mutex;
protected:
bool _canAdjustLocks = false; /// will this node be allowed to adjust locks on entities?
bool _canRez = false; /// will this node be allowed to rez in new entities?
};
#endif // hifi_NodeData_h