From 1c579675a28b9ba1b8c24ca76dd444892774e961 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Sat, 22 Feb 2025 20:55:10 +0500 Subject: [PATCH] Remember split section responses temporarily --- .../AbstractFullDataNetworkRequestQueue.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java index e1bac7e26..bafc77346 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/client/AbstractFullDataNetworkRequestQueue.java @@ -72,7 +72,12 @@ public abstract class AbstractFullDataNetworkRequestQueue implements IDebugRende private final SupplierBasedRateLimiter rateLimiter = new SupplierBasedRateLimiter<>(this::getRequestRateLimit); - private final Set visitedPositions = Collections.newSetFromMap(CacheBuilder.newBuilder() + private final Set succeededPositions = Collections.newSetFromMap(CacheBuilder.newBuilder() + .expireAfterWrite(20, TimeUnit.MINUTES) + .build() + .asMap()); + + private final Set requiresSplittingPositions = Collections.newSetFromMap(CacheBuilder.newBuilder() .expireAfterWrite(20, TimeUnit.MINUTES) .build() .asMap()); @@ -116,11 +121,16 @@ public abstract class AbstractFullDataNetworkRequestQueue implements IDebugRende { return this.submitRequest(sectionPos, null, dataSourceConsumer); } public CompletableFuture submitRequest(long sectionPos, @Nullable Long clientTimestamp, Consumer dataSourceConsumer) { - if (this.visitedPositions.contains(sectionPos)) + if (this.succeededPositions.contains(sectionPos)) { return CompletableFuture.completedFuture(ERequestResult.FAILED); } + if (this.requiresSplittingPositions.contains(sectionPos)) + { + return CompletableFuture.completedFuture(ERequestResult.REQUIRES_SPLITTING); + } + AtomicBoolean added = new AtomicBoolean(false); RequestQueueEntry entry = this.waitingTasksBySectionPos.compute(sectionPos, (pos, existingQueueEntry) -> { @@ -138,9 +148,10 @@ public abstract class AbstractFullDataNetworkRequestQueue implements IDebugRende { case SUCCEEDED: this.finishedRequests.incrementAndGet(); - this.visitedPositions.add(pos); + this.succeededPositions.add(pos); return; case REQUIRES_SPLITTING: + this.requiresSplittingPositions.add(sectionPos); return; case FAILED: this.failedRequests.incrementAndGet();