fix issue with JurisdictionMap being passed across wire

This commit is contained in:
ZappoMan 2013-08-14 14:19:06 -07:00
parent a43615e9dc
commit 4305ad552d
4 changed files with 4 additions and 18 deletions

View file

@ -1586,7 +1586,7 @@ bool Application::sendVoxelsOperation(VoxelNode* node, void* extraData) {
codeColorBuffer[bytesInCode + RED_INDEX ] = node->getColor()[RED_INDEX ]; codeColorBuffer[bytesInCode + RED_INDEX ] = node->getColor()[RED_INDEX ];
codeColorBuffer[bytesInCode + GREEN_INDEX] = node->getColor()[GREEN_INDEX]; codeColorBuffer[bytesInCode + GREEN_INDEX] = node->getColor()[GREEN_INDEX];
codeColorBuffer[bytesInCode + BLUE_INDEX ] = node->getColor()[BLUE_INDEX ]; codeColorBuffer[bytesInCode + BLUE_INDEX ] = node->getColor()[BLUE_INDEX ];
args->app->_voxelEditSender.queueVoxelEditMessage(PACKET_TYPE_SET_VOXEL_DESTRUCTIVE, codeColorBuffer, codeAndColorLength); args->app->_voxelEditSender.queueVoxelEditMessage(PACKET_TYPE_SET_VOXEL_DESTRUCTIVE, codeColorBuffer, codeAndColorLength);
delete[] codeColorBuffer; delete[] codeColorBuffer;

View file

@ -39,7 +39,6 @@ void VoxelEditPacketSender::sendVoxelEditMessage(PACKET_TYPE type, VoxelDetail&
} }
void VoxelEditPacketSender::actuallySendMessage(uint16_t nodeID, unsigned char* bufferOut, ssize_t sizeOut) { void VoxelEditPacketSender::actuallySendMessage(uint16_t nodeID, unsigned char* bufferOut, ssize_t sizeOut) {
qDebug("VoxelEditPacketSender::actuallySendMessage() sizeOut=%lu target NodeID=%d\n", sizeOut, nodeID);
NodeList* nodeList = NodeList::getInstance(); NodeList* nodeList = NodeList::getInstance();
for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) {
// only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER // only send to the NodeTypes that are NODE_TYPE_VOXEL_SERVER
@ -65,13 +64,7 @@ void VoxelEditPacketSender::queueVoxelEditMessage(PACKET_TYPE type, unsigned cha
// here we need to get the "pending packet" for this server // here we need to get the "pending packet" for this server
uint16_t nodeID = node->getNodeID(); uint16_t nodeID = node->getNodeID();
const JurisdictionMap& map = _app->_voxelServerJurisdictions[nodeID]; const JurisdictionMap& map = _app->_voxelServerJurisdictions[nodeID];
if (map.isMyJurisdiction(codeColorBuffer, CHECK_NODE_ONLY) == JurisdictionMap::WITHIN) { if (map.isMyJurisdiction(codeColorBuffer, CHECK_NODE_ONLY) == JurisdictionMap::WITHIN) {
// do I need this???
//if (_pendingEditPackets.find(nodeID) == _pendingEditPackets.end()) {
// _pendingEditPackets[nodeID] =
//}
EditPacketBuffer& packetBuffer = _pendingEditPackets[nodeID]; EditPacketBuffer& packetBuffer = _pendingEditPackets[nodeID];
packetBuffer._nodeID = nodeID; packetBuffer._nodeID = nodeID;

View file

@ -138,7 +138,7 @@ void JurisdictionMap::init(unsigned char* rootOctalCode, const std::vector<unsig
JurisdictionMap::Area JurisdictionMap::isMyJurisdiction(unsigned char* nodeOctalCode, int childIndex) const { JurisdictionMap::Area JurisdictionMap::isMyJurisdiction(unsigned char* nodeOctalCode, int childIndex) const {
// to be in our jurisdiction, we must be under the root... // to be in our jurisdiction, we must be under the root...
// if the node is an ancestor of my root, then we return ABOVE // if the node is an ancestor of my root, then we return ABOVE
if (isAncestorOf(nodeOctalCode, _rootOctalCode)) { if (isAncestorOf(nodeOctalCode, _rootOctalCode)) {
return ABOVE; return ABOVE;
@ -146,12 +146,6 @@ JurisdictionMap::Area JurisdictionMap::isMyJurisdiction(unsigned char* nodeOctal
// otherwise... // otherwise...
bool isInJurisdiction = isAncestorOf(_rootOctalCode, nodeOctalCode, childIndex); bool isInJurisdiction = isAncestorOf(_rootOctalCode, nodeOctalCode, childIndex);
//printf("isInJurisdiction=%s rootOctalCode=",debug::valueOf(isInJurisdiction));
//printOctalCode(_rootOctalCode);
//printf("nodeOctalCode=");
//printOctalCode(nodeOctalCode);
// if we're under the root, then we can't be under any of the endpoints // if we're under the root, then we can't be under any of the endpoints
if (isInJurisdiction) { if (isInJurisdiction) {
for (int i = 0; i < _endNodes.size(); i++) { for (int i = 0; i < _endNodes.size(); i++) {
@ -162,7 +156,6 @@ JurisdictionMap::Area JurisdictionMap::isMyJurisdiction(unsigned char* nodeOctal
} }
} }
} }
return isInJurisdiction ? WITHIN : BELOW; return isInJurisdiction ? WITHIN : BELOW;
} }

View file

@ -439,16 +439,16 @@ int VoxelSceneStats::unpackFromMessage(unsigned char* sourceBuffer, int availabl
if (bytes == 0) { if (bytes == 0) {
_jurisdictionRoot = NULL; _jurisdictionRoot = NULL;
_jurisdictionEndNodes.clear();
} else { } else {
_jurisdictionRoot = new unsigned char[bytes]; _jurisdictionRoot = new unsigned char[bytes];
memcpy(_jurisdictionRoot, sourceBuffer, bytes); memcpy(_jurisdictionRoot, sourceBuffer, bytes);
sourceBuffer += bytes; sourceBuffer += bytes;
// if and only if there's a root jurisdiction, also include the end nodes // if and only if there's a root jurisdiction, also include the end nodes
_jurisdictionEndNodes.clear();
int endNodeCount = 0; int endNodeCount = 0;
memcpy(&endNodeCount, sourceBuffer, sizeof(endNodeCount)); memcpy(&endNodeCount, sourceBuffer, sizeof(endNodeCount));
sourceBuffer += sizeof(endNodeCount); sourceBuffer += sizeof(endNodeCount);
for (int i=0; i < endNodeCount; i++) { for (int i=0; i < endNodeCount; i++) {
int bytes = 0; int bytes = 0;
memcpy(&bytes, sourceBuffer, sizeof(bytes)); memcpy(&bytes, sourceBuffer, sizeof(bytes));