add support for tuning the size of packets used by VoxelEditPacketSender

This commit is contained in:
ZappoMan 2013-11-10 12:44:20 -08:00
parent eb73de6b67
commit 977b730fc0
3 changed files with 21 additions and 5 deletions

View file

@ -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); }

View file

@ -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);
}

View file

@ -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__