Streaming fixes.

This commit is contained in:
Andrzej Kapolka 2014-02-09 23:38:33 -08:00
parent f81a9d9fe8
commit ee2984ce6d
2 changed files with 20 additions and 12 deletions

View file

@ -591,14 +591,13 @@ void ReliableChannel::writeData(QDataStream& out, int bytes, QVector<DatagramSeq
break;
}
spanCount++;
remainingBytes -= getBytesToWrite(first, span.unset);
remainingBytes -= getBytesToWrite(first, qMin(remainingBytes, span.unset));
position += (span.unset + span.set);
}
int leftover = _buffer.pos() - position;
if (remainingBytes > 0 && leftover > 0) {
spanCount++;
remainingBytes -= getBytesToWrite(first, leftover);
remainingBytes -= getBytesToWrite(first, qMin(remainingBytes, leftover));
}
}
@ -615,8 +614,9 @@ void ReliableChannel::writeData(QDataStream& out, int bytes, QVector<DatagramSeq
remainingBytes -= writeSpan(out, first, position, qMin(remainingBytes, span.unset), spans);
position += (span.unset + span.set);
}
if (remainingBytes > 0 && position < _buffer.pos()) {
remainingBytes -= writeSpan(out, first, position, qMin(remainingBytes, (int)(_buffer.pos() - position)), spans);
int leftover = _buffer.pos() - position;
if (remainingBytes > 0 && leftover > 0) {
remainingBytes -= writeSpan(out, first, position, qMin(remainingBytes, leftover), spans);
}
}
}

View file

@ -19,10 +19,13 @@ MetavoxelTests::MetavoxelTests(int& argc, char** argv) :
static int datagramsSent = 0;
static int datagramsReceived = 0;
static int highPriorityMessagesSent = 0;
static int highPriorityMessagesReceived = 0;
static int unreliableMessagesSent = 0;
static int unreliableMessagesReceived = 0;
static int streamedBytesSent = 0;
static int streamedBytesReceived = 0;
static int lowPriorityStreamedBytesSent = 0;
static int lowPriorityStreamedBytesReceived = 0;
bool MetavoxelTests::run() {
@ -46,10 +49,11 @@ bool MetavoxelTests::run() {
}
}
qDebug() << "Sent" << highPriorityMessagesSent << "high priority messages";
qDebug() << "Sent" << highPriorityMessagesSent << "high priority messages, received" << highPriorityMessagesReceived;
qDebug() << "Sent" << unreliableMessagesSent << "unreliable messages, received" << unreliableMessagesReceived;
qDebug() << "Sent" << streamedBytesSent << "streamed bytes";
qDebug() << "Sent" << lowPriorityStreamedBytesSent << "low-priority streamed bytes";
qDebug() << "Sent" << streamedBytesSent << "streamed bytes, received" << streamedBytesReceived;
qDebug() << "Sent" << lowPriorityStreamedBytesSent << "low-priority streamed bytes, received" <<
lowPriorityStreamedBytesReceived;
qDebug() << "Sent" << datagramsSent << "datagrams, received" << datagramsReceived;
qDebug() << "All tests passed!";
@ -87,9 +91,10 @@ Endpoint::Endpoint(const QByteArray& datagramHeader) :
output->setPriority(0.25f);
const int MIN_LOW_PRIORITY_DATA = 100000;
const int MAX_LOW_PRIORITY_DATA = 200000;
_lowPriorityDataStreamed.append(createRandomBytes(MIN_LOW_PRIORITY_DATA, MAX_LOW_PRIORITY_DATA));
//output->getBuffer().write(_lowPriorityDataStreamed);
//lowPriorityStreamedBytesSent += _lowPriorityDataStreamed.size();
QByteArray bytes = createRandomBytes(MIN_LOW_PRIORITY_DATA, MAX_LOW_PRIORITY_DATA);
_lowPriorityDataStreamed.append(bytes);
output->getBuffer().write(bytes);
lowPriorityStreamedBytesSent += bytes.size();
}
static QVariant createRandomMessage() {
@ -172,7 +177,7 @@ void Endpoint::sendDatagram(const QByteArray& datagram) {
datagramsSent++;
// some datagrams are dropped
const float DROP_PROBABILITY = 0.1f;
const float DROP_PROBABILITY = 0.25f;
if (randFloat() < DROP_PROBABILITY) {
return;
}
@ -188,6 +193,7 @@ void Endpoint::handleHighPriorityMessage(const QVariant& message) {
if (!messagesEqual(message, sentMessage)) {
throw QString("Sent/received high priority message mismatch.");
}
highPriorityMessagesReceived++;
}
void Endpoint::readMessage(Bitstream& in) {
@ -219,6 +225,7 @@ void Endpoint::readReliableChannel() {
if (compare != bytes) {
throw QString("Sent/received streamed data mismatch.");
}
streamedBytesReceived += bytes.size();
}
void Endpoint::readLowPriorityReliableChannel() {
@ -232,4 +239,5 @@ void Endpoint::readLowPriorityReliableChannel() {
if (compare != bytes) {
throw QString("Sent/received low-priority streamed data mismatch.");
}
lowPriorityStreamedBytesReceived += bytes.size();
}