handle immediate add packets in NodeList

This commit is contained in:
Stephen Birarda 2015-05-28 11:02:45 -07:00
parent 5c75863af4
commit cee058c4ce
4 changed files with 53 additions and 26 deletions

View file

@ -490,6 +490,10 @@ SharedNodePointer LimitedNodeList::addOrUpdateNode(const QUuid& uuid, NodeType_t
// we didn't have this node, so add them // we didn't have this node, so add them
Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket, canAdjustLocks, canRez, connectionSecret); Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket, canAdjustLocks, canRez, connectionSecret);
if (nodeType == NodeType::AudioMixer) {
LimitedNodeList::flagTimeForConnectionStep(LimitedNodeList::AddedAudioMixer);
}
SharedNodePointer newNodePointer(newNode); SharedNodePointer newNodePointer(newNode);
_nodeHash.insert(UUIDNodePair(newNode->getUUID(), newNodePointer)); _nodeHash.insert(UUIDNodePair(newNode->getUUID(), newNodePointer));

View file

@ -96,6 +96,7 @@ public:
SetDomainSocket, SetDomainSocket,
SendDSCheckIn, SendDSCheckIn,
ReceiveDSList, ReceiveDSList,
AddedAudioMixer,
SendAudioPing, SendAudioPing,
SetAudioMixerSocket, SetAudioMixerSocket,
SendAudioPacket, SendAudioPacket,

View file

@ -170,12 +170,18 @@ void NodeList::timePingReply(const QByteArray& packet, const SharedNodePointer&
} }
void NodeList::processNodeData(const HifiSockAddr& senderSockAddr, const QByteArray& packet) { void NodeList::processNodeData(const HifiSockAddr& senderSockAddr, const QByteArray& packet) {
switch (packetTypeForPacket(packet)) { PacketType packetType = packetTypeForPacket(packet);
case PacketTypeDomainList: { switch (packetType) {
case PacketTypeDomainList:
case PacketTypeDomainServerAddedNode: {
if (!_domainHandler.getSockAddr().isNull()) { if (!_domainHandler.getSockAddr().isNull()) {
// only process a list from domain-server if we're talking to a domain // only process a packet from domain-server if we're talking to a domain
// TODO: how do we make sure this is actually the domain we want the list from (DTLS probably) // TODO: how do we make sure this is actually the domain we want the list from (DTLS probably)
if (packetType == PacketTypeDomainList) {
processDomainServerList(packet); processDomainServerList(packet);
} else if (packetType == PacketTypeDomainServerAddedNode) {
processDomainServerAddedNode(packet);
}
} }
break; break;
} }
@ -525,6 +531,22 @@ int NodeList::processDomainServerList(const QByteArray& packet) {
// pull each node in the packet // pull each node in the packet
while (packetStream.device()->pos() < packet.size()) { while (packetStream.device()->pos() < packet.size()) {
parseNodeFromPacketStream(packetStream);
}
return readNodes;
}
void NodeList::processDomainServerAddedNode(const QByteArray& packet) {
// setup a QDataStream, skip the header
QDataStream packetStream(packet);
packetStream.skipRawData(numBytesForPacketHeader(packet));
// use our shared method to pull out the new node
parseNodeFromPacketStream(packetStream);
}
void NodeList::parseNodeFromPacketStream(QDataStream& packetStream) {
// setup variables to read into from QDataStream // setup variables to read into from QDataStream
qint8 nodeType; qint8 nodeType;
QUuid nodeUUID, connectionUUID; QUuid nodeUUID, connectionUUID;
@ -545,9 +567,6 @@ int NodeList::processDomainServerList(const QByteArray& packet) {
SharedNodePointer node = addOrUpdateNode(nodeUUID, nodeType, nodePublicSocket, SharedNodePointer node = addOrUpdateNode(nodeUUID, nodeType, nodePublicSocket,
nodeLocalSocket, canAdjustLocks, canRez, nodeLocalSocket, canAdjustLocks, canRez,
connectionUUID); connectionUUID);
}
return readNodes;
} }
void NodeList::sendAssignment(Assignment& assignment) { void NodeList::sendAssignment(Assignment& assignment) {

View file

@ -61,8 +61,6 @@ public:
void processNodeData(const HifiSockAddr& senderSockAddr, const QByteArray& packet); void processNodeData(const HifiSockAddr& senderSockAddr, const QByteArray& packet);
int processDomainServerList(const QByteArray& packet);
void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; } void setAssignmentServerSocket(const HifiSockAddr& serverSocket) { _assignmentServerSocket = serverSocket; }
void sendAssignment(Assignment& assignment); void sendAssignment(Assignment& assignment);
@ -94,6 +92,11 @@ private:
void sendDSPathQuery(const QString& newPath); void sendDSPathQuery(const QString& newPath);
int processDomainServerList(const QByteArray& packet);
void processDomainServerAddedNode(const QByteArray& packet);
void parseNodeFromPacketStream(QDataStream& packetStream);
NodeType_t _ownerType; NodeType_t _ownerType;
NodeSet _nodeTypesOfInterest; NodeSet _nodeTypesOfInterest;
DomainHandler _domainHandler; DomainHandler _domainHandler;