associate assignment wallet UUID with node via DomainServerNodeData

This commit is contained in:
Stephen Birarda 2014-05-20 15:50:09 -07:00
parent 13077e48f8
commit 072343ce79
3 changed files with 31 additions and 21 deletions

View file

@ -342,8 +342,19 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock
// check if this connect request matches an assignment in the queue // check if this connect request matches an assignment in the queue
bool isAssignment = _pendingAssignedNodes.contains(packetUUID); bool isAssignment = _pendingAssignedNodes.contains(packetUUID);
SharedAssignmentPointer matchingQueuedAssignment = SharedAssignmentPointer(); SharedAssignmentPointer matchingQueuedAssignment = SharedAssignmentPointer();
PendingAssignedNodeData* pendingAssigneeData = NULL;
if (isAssignment) { if (isAssignment) {
matchingQueuedAssignment = matchingQueuedAssignmentForCheckIn(packetUUID, nodeType); pendingAssigneeData = _pendingAssignedNodes.take(packetUUID);
if (pendingAssigneeData) {
matchingQueuedAssignment = matchingQueuedAssignmentForCheckIn(packetUUID, nodeType);
if (matchingQueuedAssignment) {
qDebug() << "Assignment deployed with" << uuidStringWithoutCurlyBraces(packetUUID)
<< "matches unfulfilled assignment"
<< uuidStringWithoutCurlyBraces(matchingQueuedAssignment->getUUID());
}
}
} }
if (!matchingQueuedAssignment && !_oauthProviderURL.isEmpty() && _argumentVariantMap.contains(ALLOWED_ROLES_CONFIG_KEY)) { if (!matchingQueuedAssignment && !_oauthProviderURL.isEmpty() && _argumentVariantMap.contains(ALLOWED_ROLES_CONFIG_KEY)) {
@ -387,6 +398,10 @@ void DomainServer::handleConnectRequest(const QByteArray& packet, const HifiSock
if (isAssignment) { if (isAssignment) {
nodeData->setAssignmentUUID(matchingQueuedAssignment->getUUID()); nodeData->setAssignmentUUID(matchingQueuedAssignment->getUUID());
nodeData->setWalletUUID(pendingAssigneeData->getWalletUUID());
// now that we've pulled the wallet UUID and added the node to our list, delete the pending assignee data
delete pendingAssigneeData;
} }
nodeData->setSendingSockAddr(senderSockAddr); nodeData->setSendingSockAddr(senderSockAddr);
@ -1076,28 +1091,18 @@ void DomainServer::nodeKilled(SharedNodePointer node) {
} }
} }
SharedAssignmentPointer DomainServer::matchingQueuedAssignmentForCheckIn(const QUuid& checkInUUID, NodeType_t nodeType) { SharedAssignmentPointer DomainServer::matchingQueuedAssignmentForCheckIn(const QUuid& assignmentUUID, NodeType_t nodeType) {
QQueue<SharedAssignmentPointer>::iterator i = _unfulfilledAssignments.begin(); QQueue<SharedAssignmentPointer>::iterator i = _unfulfilledAssignments.begin();
PendingAssignedNodeData* pendingAssigneeData = _pendingAssignedNodes.take(checkInUUID); while (i != _unfulfilledAssignments.end()) {
if (i->data()->getType() == Assignment::typeForNodeType(nodeType)
if (pendingAssigneeData) { && i->data()->getUUID() == assignmentUUID) {
while (i != _unfulfilledAssignments.end()) { // we have an unfulfilled assignment to return
if (i->data()->getType() == Assignment::typeForNodeType(nodeType)
&& i->data()->getUUID() == pendingAssigneeData->getAssignmentUUID()) { // return the matching assignment
// we have an unfulfilled assignment to return return _unfulfilledAssignments.takeAt(i - _unfulfilledAssignments.begin());
qDebug() << "Assignment deployed with" << uuidStringWithoutCurlyBraces(checkInUUID) } else {
<< "matches unfulfilled assignment" ++i;
<< uuidStringWithoutCurlyBraces(pendingAssigneeData->getAssignmentUUID());
// first clear the pending assignee data
delete pendingAssigneeData;
// return the matching assignment
return _unfulfilledAssignments.takeAt(i - _unfulfilledAssignments.begin());
} else {
++i;
}
} }
} }

View file

@ -20,6 +20,7 @@
DomainServerNodeData::DomainServerNodeData() : DomainServerNodeData::DomainServerNodeData() :
_sessionSecretHash(), _sessionSecretHash(),
_assignmentUUID(), _assignmentUUID(),
_walletUUID(),
_statsJSONObject(), _statsJSONObject(),
_sendingSockAddr(), _sendingSockAddr(),
_isAuthenticated(true) _isAuthenticated(true)

View file

@ -30,6 +30,9 @@ public:
void setAssignmentUUID(const QUuid& assignmentUUID) { _assignmentUUID = assignmentUUID; } void setAssignmentUUID(const QUuid& assignmentUUID) { _assignmentUUID = assignmentUUID; }
const QUuid& getAssignmentUUID() const { return _assignmentUUID; } const QUuid& getAssignmentUUID() const { return _assignmentUUID; }
void setWalletUUID(const QUuid& walletUUID) { _walletUUID = walletUUID; }
const QUuid& getWalletUUID() const { return _walletUUID; }
void setSendingSockAddr(const HifiSockAddr& sendingSockAddr) { _sendingSockAddr = sendingSockAddr; } void setSendingSockAddr(const HifiSockAddr& sendingSockAddr) { _sendingSockAddr = sendingSockAddr; }
const HifiSockAddr& getSendingSockAddr() { return _sendingSockAddr; } const HifiSockAddr& getSendingSockAddr() { return _sendingSockAddr; }
@ -42,6 +45,7 @@ private:
QHash<QUuid, QUuid> _sessionSecretHash; QHash<QUuid, QUuid> _sessionSecretHash;
QUuid _assignmentUUID; QUuid _assignmentUUID;
QUuid _walletUUID;
QJsonObject _statsJSONObject; QJsonObject _statsJSONObject;
HifiSockAddr _sendingSockAddr; HifiSockAddr _sendingSockAddr;
bool _isAuthenticated; bool _isAuthenticated;