diff --git a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataFileHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataFileHandler.java index 1daaa6962..3526df785 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataFileHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/file/fullDatafile/RemoteFullDataFileHandler.java @@ -3,18 +3,22 @@ package com.seibel.distanthorizons.core.file.fullDatafile; import com.seibel.distanthorizons.core.dataObjects.fullData.sources.interfaces.IFullDataSource; import com.seibel.distanthorizons.core.file.structure.AbstractSaveStructure; import com.seibel.distanthorizons.core.level.IDhLevel; +import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.network.ChildNetworkEventSource; import com.seibel.distanthorizons.core.network.NetworkClient; import com.seibel.distanthorizons.core.network.future.NetworkRequestTracker; import com.seibel.distanthorizons.core.network.messages.ChunkRequestMessage; import com.seibel.distanthorizons.core.network.messages.ChunkResponseMessage; import com.seibel.distanthorizons.core.pos.DhSectionPos; +import org.apache.logging.log4j.Logger; import java.nio.file.FileAlreadyExistsException; import java.util.concurrent.CompletableFuture; public class RemoteFullDataFileHandler extends FullDataFileHandler { + protected static final Logger LOGGER = DhLoggerBuilder.getLogger(); + private final NetworkClient networkClient; private final NetworkRequestTracker chunkRequestTracker; @@ -28,8 +32,14 @@ public class RemoteFullDataFileHandler extends FullDataFileHandler public CompletableFuture read(DhSectionPos pos) { // TODO: LOD data file updating is probably incomplete return super.read(pos).thenCompose((fullDataSource) -> { + CompletableFuture responseFuture = chunkRequestTracker.sendRequest(networkClient.getChannel(), new ChunkRequestMessage(pos)) + .exceptionally(throwable -> { + LOGGER.error(throwable); + return null; + }); + responseFuture.thenAccept(response -> LOGGER.info("ChunkResponseMessage "+response.dhSectionPos)); + FullDataMetaFile metaFile = this.getLoadOrMakeFile(pos, true); - CompletableFuture responseFuture = chunkRequestTracker.sendRequest(networkClient.getChannel(), new ChunkRequestMessage(pos)); return onDataFileUpdate(fullDataSource, metaFile, iFullDataSource -> {}, iFullDataSource -> true); }); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/future/NetworkRequestTracker.java b/core/src/main/java/com/seibel/distanthorizons/core/network/future/NetworkRequestTracker.java index f04dc5d46..2ca57abb0 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/future/NetworkRequestTracker.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/future/NetworkRequestTracker.java @@ -58,9 +58,8 @@ public class NetworkRequestTracker } private void completeAllExceptionally(Channel channel, Throwable cause) { - for (CompletableFuture responseFuture : pendingFutures.row(channel).values()) { + for (CompletableFuture responseFuture : pendingFutures.row(channel).values()) responseFuture.completeExceptionally(cause); - }; pendingFutures.row(channel).clear(); } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ChunkRequestMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ChunkRequestMessage.java index 72eb85870..8fe531253 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ChunkRequestMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/ChunkRequestMessage.java @@ -1,6 +1,7 @@ package com.seibel.distanthorizons.core.network.messages; import com.seibel.distanthorizons.core.network.future.IFutureTrackableNetworkMessage; +import com.seibel.distanthorizons.core.network.protocol.INetworkObject; import com.seibel.distanthorizons.core.pos.DhSectionPos; import io.netty.buffer.ByteBuf; @@ -19,12 +20,12 @@ public class ChunkRequestMessage implements IFutureTrackableNetworkMessage messageClass) { return this.classToId.get(messageClass); } + public int getMessageId(Class messageClass) { + try + { + return this.classToId.get(messageClass); + } + catch (NullPointerException e) + { + throw new IllegalArgumentException("Message does not have ID assigned to it: "+messageClass.getSimpleName()); + } + } } diff --git a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java index b36702b75..db66267ab 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/world/DhClientWorld.java @@ -66,7 +66,7 @@ public class DhClientWorld extends AbstractDhWorld implements IDhClientWorld networkClient.registerAckHandler(RemotePlayerConfigMessage.class, ctx -> { // TODO Actually request chunks - ctx.writeAndFlush(new ChunkRequestMessage(new DhSectionPos(new DhBlockPos2D(0, 0)))); + // ctx.writeAndFlush(new ChunkRequestMessage(new DhSectionPos(new DhBlockPos2D(0, 0)))); }); }