mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-25 11:54:40 +01:00
Don't drop every player after the server is held up
This commit is contained in:
1 parent
223d41a40e
commit
ecb083f417
9 files changed
+139
-13
No files matched your search
@@ -414,10 +414,12 @@ bool Host::accept_data(Guest &source, const Packet &p) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void Host::receive(std::uint64_t peer, std::span<const std::uint8_t> bytes) {
|
||||
void Host::receive(std::uint64_t peer, std::span<const std::uint8_t> bytes, std::uint64_t received_at) {
|
||||
auto *link = find(peer);
|
||||
if (!link) return;
|
||||
if (!link->budget.accept(now_, bytes.size(), 1U)) return drop(peer, "Peer exceeded the multiplayer packet limit.");
|
||||
// Counted by arrival: after the server was held up, everyone's packets are read at once.
|
||||
if (!link->budget.accept(received_at ? received_at : now_, bytes.size(), 1U))
|
||||
return drop(peer, "Peer exceeded the multiplayer packet limit.");
|
||||
bool missing_reference{};
|
||||
const auto decoded = link->receiver.receive(bytes, missing_reference, world_);
|
||||
if (missing_reference) return;
|
||||
@@ -764,7 +766,7 @@ void Host::tick(std::uint64_t now) {
|
||||
}
|
||||
if (link.connected && !guest->connected_at) guest->connected_at = now_;
|
||||
}
|
||||
for (const auto &message : transport_.receive()) receive(message.peer, message.bytes);
|
||||
for (const auto &message : transport_.receive()) receive(message.peer, message.bytes, message.arrived);
|
||||
receive_cosmetics();
|
||||
for (auto it = guests_.begin(); it != guests_.end();) {
|
||||
auto &g = *(it++)->second;
|
||||
|
||||
Reference in new issue
Block a user