Add proper message failure handling to Connection

This commit is contained in:
Ryan Huffman 2015-11-30 11:53:08 -08:00
parent 2e76f0e0d8
commit 304b105dac
4 changed files with 17 additions and 0 deletions

View file

@ -49,6 +49,11 @@ Connection::Connection(Socket* parentSocket, HifiSockAddr destination, std::uniq
Connection::~Connection() {
stopSendQueue();
// Fail any pending received messages
for (auto& pendingMessage : _pendingReceivedMessages) {
_parentSocket->messageFailed(this, pendingMessage.first);
}
}
void Connection::stopSendQueue() {
@ -805,6 +810,9 @@ void Connection::resetReceiveState() {
_receivedControlProbeTail = false;
// clear any pending received messages
for (auto& pendingMessage : _pendingReceivedMessages) {
_parentSocket->messageFailed(this, pendingMessage.first);
}
_pendingReceivedMessages.clear();
}

View file

@ -74,6 +74,8 @@ public:
bool isActive() const { return _isActive; }
HifiSockAddr getDestination() const { return _destination; }
signals:
void packetSent();
void connectionInactive(const HifiSockAddr& sockAddr);

View file

@ -218,6 +218,12 @@ void Socket::messageReceived(std::unique_ptr<Packet> packet) {
}
}
void Socket::messageFailed(Connection* connection, Packet::MessageNumber messageNumber) {
if (_messageFailureHandler) {
_messageFailureHandler(connection->getDestination(), messageNumber);
}
}
void Socket::readPendingDatagrams() {
int packetSizeWithHeader = -1;
while ((packetSizeWithHeader = _udpSocket.pendingDatagramSize()) != -1) {

View file

@ -74,6 +74,7 @@ public:
void setCongestionControlFactory(std::unique_ptr<CongestionControlVirtualFactory> ccFactory);
void messageReceived(std::unique_ptr<Packet> packet);
void messageFailed(Connection* connection, Packet::MessageNumber messageNumber);
StatsVector sampleStatsForAllConnections();