Working on tests for delta streaming.

This commit is contained in:
Andrzej Kapolka 2014-06-05 16:45:13 -07:00
parent 887561a4e1
commit c333fb904f
2 changed files with 52 additions and 1 deletions

View file

@ -229,6 +229,20 @@ Endpoint::Endpoint(const QByteArray& datagramHeader) :
connect(_sequencer, SIGNAL(receivedHighPriorityMessage(const QVariant&)), connect(_sequencer, SIGNAL(receivedHighPriorityMessage(const QVariant&)),
SLOT(handleHighPriorityMessage(const QVariant&))); SLOT(handleHighPriorityMessage(const QVariant&)));
connect(_sequencer, SIGNAL(sendAcknowledged(int)), SLOT(clearSendRecordsBefore(int)));
connect(_sequencer, SIGNAL(receiveAcknowledged(int)), SLOT(clearReceiveRecordsBefore(int)));
// insert the baseline send record
SendRecord sendRecord = { 0 };
_sendRecords.append(sendRecord);
// insert the baseline receive record
ReceiveRecord receiveRecord = { 0 };
_receiveRecords.append(receiveRecord);
// create the object that represents out delta-encoded state
//_localState = new TestSharedObjectA();
connect(_sequencer->getReliableInputChannel(), SIGNAL(receivedMessage(const QVariant&)), connect(_sequencer->getReliableInputChannel(), SIGNAL(receivedMessage(const QVariant&)),
SLOT(handleReliableMessage(const QVariant&))); SLOT(handleReliableMessage(const QVariant&)));
@ -326,7 +340,7 @@ bool Endpoint::simulate(int iterationNumber) {
// send a packet // send a packet
try { try {
Bitstream& out = _sequencer->startPacket(); Bitstream& out = _sequencer->startPacket();
SequencedTestMessage message = { iterationNumber, createRandomMessage() }; SequencedTestMessage message = { iterationNumber, createRandomMessage(), _localState };
_unreliableMessagesSent.append(message); _unreliableMessagesSent.append(message);
unreliableMessagesSent++; unreliableMessagesSent++;
out << message; out << message;
@ -337,6 +351,10 @@ bool Endpoint::simulate(int iterationNumber) {
return true; return true;
} }
// record the send
SendRecord record = { _sequencer->getOutgoingPacketNumber(), _localState };
_sendRecords.append(record);
return false; return false;
} }
@ -387,6 +405,10 @@ void Endpoint::readMessage(Bitstream& in) {
SequencedTestMessage message; SequencedTestMessage message;
in >> message; in >> message;
// record the receipt
ReceiveRecord record = { _sequencer->getIncomingPacketNumber(), message.state };
_receiveRecords.append(record);
for (QList<SequencedTestMessage>::iterator it = _other->_unreliableMessagesSent.begin(); for (QList<SequencedTestMessage>::iterator it = _other->_unreliableMessagesSent.begin();
it != _other->_unreliableMessagesSent.end(); it++) { it != _other->_unreliableMessagesSent.end(); it++) {
if (it->sequenceNumber == message.sequenceNumber) { if (it->sequenceNumber == message.sequenceNumber) {
@ -430,6 +452,14 @@ void Endpoint::readReliableChannel() {
streamedBytesReceived += bytes.size(); streamedBytesReceived += bytes.size();
} }
void Endpoint::clearSendRecordsBefore(int index) {
_sendRecords.erase(_sendRecords.begin(), _sendRecords.begin() + index + 1);
}
void Endpoint::clearReceiveRecordsBefore(int index) {
_receiveRecords.erase(_receiveRecords.begin(), _receiveRecords.begin() + index + 1);
}
TestSharedObjectA::TestSharedObjectA(float foo, TestEnum baz, TestFlags bong) : TestSharedObjectA::TestSharedObjectA(float foo, TestEnum baz, TestFlags bong) :
_foo(foo), _foo(foo),
_baz(baz), _baz(baz),

View file

@ -54,9 +54,29 @@ private slots:
void handleReliableMessage(const QVariant& message); void handleReliableMessage(const QVariant& message);
void readReliableChannel(); void readReliableChannel();
void clearSendRecordsBefore(int index);
void clearReceiveRecordsBefore(int index);
private: private:
class SendRecord {
public:
int packetNumber;
SharedObjectPointer localState;
};
class ReceiveRecord {
public:
int packetNumber;
SharedObjectPointer remoteState;
};
DatagramSequencer* _sequencer; DatagramSequencer* _sequencer;
QList<SendRecord> _sendRecords;
QList<ReceiveRecord> _receiveRecords;
SharedObjectPointer _localState;
Endpoint* _other; Endpoint* _other;
QList<QPair<QByteArray, int> > _delayedDatagrams; QList<QPair<QByteArray, int> > _delayedDatagrams;
float _highPriorityMessagesToSend; float _highPriorityMessagesToSend;
@ -195,6 +215,7 @@ public:
STREAM int sequenceNumber; STREAM int sequenceNumber;
STREAM QVariant submessage; STREAM QVariant submessage;
STREAM SharedObjectPointer state;
}; };
DECLARE_STREAMABLE_METATYPE(SequencedTestMessage) DECLARE_STREAMABLE_METATYPE(SequencedTestMessage)