From 977b730fc097438002662ff07c797e1d5242de03 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Sun, 10 Nov 2013 12:44:20 -0800 Subject: [PATCH] add support for tuning the size of packets used by VoxelEditPacketSender --- assignment-client/src/voxels/VoxelScriptingInterface.h | 6 ++++++ libraries/voxels/src/VoxelEditPacketSender.cpp | 10 ++++++---- libraries/voxels/src/VoxelEditPacketSender.h | 10 +++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/voxels/VoxelScriptingInterface.h b/assignment-client/src/voxels/VoxelScriptingInterface.h index 4a6ca91039..473cf3035c 100644 --- a/assignment-client/src/voxels/VoxelScriptingInterface.h +++ b/assignment-client/src/voxels/VoxelScriptingInterface.h @@ -50,6 +50,12 @@ public slots: /// \param scale the scale of the voxel (in VS space) void queueVoxelDelete(float x, float y, float z, float scale); + /// Set the desired max packet size in bytes that should be created + void setMaxPacketSize(int maxPacketSize) { return _voxelPacketSender.setMaxPacketSize(maxPacketSize); } + + /// returns the current desired max packet size in bytes that will be created + int getMaxPacketSize() const { return _voxelPacketSender.getMaxPacketSize(); } + /// set the max packets per second send rate void setPacketsPerSecond(int packetsPerSecond) { return _voxelPacketSender.setPacketsPerSecond(packetsPerSecond); } diff --git a/libraries/voxels/src/VoxelEditPacketSender.cpp b/libraries/voxels/src/VoxelEditPacketSender.cpp index cc9f25133b..1652e22dc5 100644 --- a/libraries/voxels/src/VoxelEditPacketSender.cpp +++ b/libraries/voxels/src/VoxelEditPacketSender.cpp @@ -33,7 +33,8 @@ VoxelEditPacketSender::VoxelEditPacketSender(PacketSenderNotify* notify) : _maxPendingMessages(DEFAULT_MAX_PENDING_MESSAGES), _releaseQueuedMessagesPending(false), _voxelServerJurisdictions(NULL), - _sequenceNumber(0) { + _sequenceNumber(0), + _maxPacketSize(MAX_PACKET_SIZE) { } VoxelEditPacketSender::~VoxelEditPacketSender() { @@ -146,10 +147,11 @@ void VoxelEditPacketSender::queueVoxelEditMessages(PACKET_TYPE type, int numberO } for (int i = 0; i < numberOfDetails; i++) { - static unsigned char bufferOut[MAX_PACKET_SIZE]; + // use MAX_PACKET_SIZE since it's static and guarenteed to be larger than _maxPacketSize + static unsigned char bufferOut[MAX_PACKET_SIZE]; int sizeOut = 0; - if (encodeVoxelEditMessageDetails(type, 1, &details[i], &bufferOut[0], MAX_PACKET_SIZE, sizeOut)) { + if (encodeVoxelEditMessageDetails(type, 1, &details[i], &bufferOut[0], _maxPacketSize, sizeOut)) { queueVoxelEditMessage(type, bufferOut, sizeOut); } } @@ -261,7 +263,7 @@ void VoxelEditPacketSender::queueVoxelEditMessage(PACKET_TYPE type, unsigned cha // If we're switching type, then we send the last one and start over if ((type != packetBuffer._currentType && packetBuffer._currentSize > 0) || - (packetBuffer._currentSize + length >= MAX_PACKET_SIZE)) { + (packetBuffer._currentSize + length >= _maxPacketSize)) { releaseQueuedPacket(packetBuffer); initializePacket(packetBuffer, type); } diff --git a/libraries/voxels/src/VoxelEditPacketSender.h b/libraries/voxels/src/VoxelEditPacketSender.h index eecb7e8677..22037519f6 100644 --- a/libraries/voxels/src/VoxelEditPacketSender.h +++ b/libraries/voxels/src/VoxelEditPacketSender.h @@ -83,9 +83,16 @@ public: // the default number of pending messages we will store if no voxel servers are available static const int DEFAULT_MAX_PENDING_MESSAGES; - + + // is there a voxel server available to send packets to bool voxelServersExist() const; + /// Set the desired max packet size in bytes that the VoxelEditPacketSender should create + void setMaxPacketSize(int maxPacketSize) { _maxPacketSize = maxPacketSize; } + + /// returns the current desired max packet size in bytes that the VoxelEditPacketSender will create + int getMaxPacketSize() const { return _maxPacketSize; } + private: bool _shouldSend; void queuePacketToNode(const QUuid& nodeID, unsigned char* buffer, ssize_t length); @@ -107,5 +114,6 @@ private: NodeToJurisdictionMap* _voxelServerJurisdictions; unsigned short int _sequenceNumber; + int _maxPacketSize; }; #endif // __shared__VoxelEditPacketSender__