fix ft activity shortcicuting
move receiving transfers before sending transfers
This commit is contained in:
@@ -172,6 +172,30 @@ void NGCFT1::updateSendTransfer(float time_delta, uint32_t group_number, uint32_
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_number, Group::Peer& peer) {
|
bool NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_number, Group::Peer& peer) {
|
||||||
|
bool recv_activity {false};
|
||||||
|
for (size_t idx = 0; idx < peer.recv_transfers.size(); idx++) {
|
||||||
|
if (!peer.recv_transfers.at(idx).has_value()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto& transfer = peer.recv_transfers.at(idx).value();
|
||||||
|
|
||||||
|
// proper switch case?
|
||||||
|
if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) {
|
||||||
|
transfer.timer -= time_delta;
|
||||||
|
if (transfer.timer <= 0.f) {
|
||||||
|
peer.recv_transfers.at(idx).reset();
|
||||||
|
}
|
||||||
|
recv_activity = true; // count as activity, not sure we need this
|
||||||
|
} else {
|
||||||
|
transfer.timer += time_delta;
|
||||||
|
if (transfer.timer < 0.5f) {
|
||||||
|
// back off when no activity
|
||||||
|
recv_activity = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (peer.cca) {
|
if (peer.cca) {
|
||||||
auto timeouts = peer.cca->getTimeouts();
|
auto timeouts = peer.cca->getTimeouts();
|
||||||
std::set<CCAI::SeqIDType> timeouts_set{timeouts.cbegin(), timeouts.cend()};
|
std::set<CCAI::SeqIDType> timeouts_set{timeouts.cbegin(), timeouts.cend()};
|
||||||
@@ -202,30 +226,6 @@ bool NGCFT1::iteratePeer(float time_delta, uint32_t group_number, uint32_t peer_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool recv_activity {false};
|
|
||||||
for (size_t idx = 0; idx < peer.recv_transfers.size(); idx++) {
|
|
||||||
if (!peer.recv_transfers.at(idx).has_value()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto& transfer = peer.recv_transfers.at(idx).value();
|
|
||||||
|
|
||||||
// proper switch case?
|
|
||||||
if (transfer.state == Group::Peer::RecvTransfer::State::FINISHING) {
|
|
||||||
transfer.timer -= time_delta;
|
|
||||||
if (transfer.timer <= 0.f) {
|
|
||||||
peer.recv_transfers.at(idx).reset();
|
|
||||||
}
|
|
||||||
recv_activity = true; // count as activity, not sure we need this
|
|
||||||
} else {
|
|
||||||
transfer.timer += time_delta;
|
|
||||||
if (transfer.timer < 0.5f) {
|
|
||||||
// back off when no activity
|
|
||||||
recv_activity = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return peer.active_send_transfers > 0 || recv_activity;
|
return peer.active_send_transfers > 0 || recv_activity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ float NGCFT1::iterate(float time_delta) {
|
|||||||
bool transfer_activity {false};
|
bool transfer_activity {false};
|
||||||
for (auto& [group_number, group] : groups) {
|
for (auto& [group_number, group] : groups) {
|
||||||
for (auto& [peer_number, peer] : group.peers) {
|
for (auto& [peer_number, peer] : group.peers) {
|
||||||
transfer_activity = transfer_activity || iteratePeer(time_delta, group_number, peer_number, peer);
|
transfer_activity = iteratePeer(time_delta, group_number, peer_number, peer) || transfer_activity;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
// find any active transfer
|
// find any active transfer
|
||||||
|
|||||||
Reference in New Issue
Block a user