From fccd197cd5ec714a47f17c498fe385343a49cd31 Mon Sep 17 00:00:00 2001 From: s809 <43530948+s809@users.noreply.github.com> Date: Tue, 19 Sep 2023 18:53:10 +0500 Subject: [PATCH] Fix chunk updates sent to incomplete connections Hide useless warns, for cases when listener is not configured yet --- .../seibel/distanthorizons/core/level/DhServerLevel.java | 9 ++------- .../core/multiplayer/RemotePlayerConnectionHandler.java | 7 +++++-- .../distanthorizons/core/network/NetworkEventSource.java | 7 ++----- .../fullData/updates/FullDataPartialUpdateMessage.java | 3 +++ .../network/protocol/FutureTrackableNetworkMessage.java | 5 ++--- .../core/network/protocol/NetworkMessage.java | 4 ++-- 6 files changed, 16 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java index 35d1947c0..eba0de788 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/level/DhServerLevel.java @@ -45,7 +45,6 @@ import com.seibel.distanthorizons.core.network.messages.fullData.updates.FullDat import com.seibel.distanthorizons.core.network.messages.fullData.updates.FullDataPartialUpdateMessage; import com.seibel.distanthorizons.core.pos.DhBlockPos2D; import com.seibel.distanthorizons.core.pos.DhChunkPos; -import com.seibel.distanthorizons.core.pos.DhLodPos; import com.seibel.distanthorizons.core.pos.DhSectionPos; import com.seibel.distanthorizons.core.logging.DhLoggerBuilder; import com.seibel.distanthorizons.core.util.LodUtil; @@ -59,7 +58,6 @@ import org.apache.logging.log4j.Logger; import javax.annotation.CheckForNull; import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.concurrent.*; public class DhServerLevel extends DhLevel implements IDhServerLevel @@ -263,12 +261,9 @@ public class DhServerLevel extends DhLevel implements IDhServerLevel future.thenAccept(chunkSizedFullDataAccessor -> { - for (IServerPlayerWrapper serverPlayer : worldGenLoopingQueue) + for (ServerPlayerState serverPlayerState : remotePlayerConnectionHandler.getConnectedPlayers()) { - ServerPlayerState serverPlayerState = remotePlayerConnectionHandler.getPlayer(serverPlayer); - if (serverPlayerState == null) continue; - - if (chunk.getChunkPos().distance(new DhChunkPos(serverPlayer.getPosition())) <= serverPlayerState.config.renderDistance) + if (chunk.getChunkPos().distance(new DhChunkPos(serverPlayerState.serverPlayer.getPosition())) <= serverPlayerState.config.renderDistance) serverPlayerState.channelContext.writeAndFlush(new FullDataPartialUpdateMessage(chunkSizedFullDataAccessor, this)); } }); diff --git a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/RemotePlayerConnectionHandler.java b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/RemotePlayerConnectionHandler.java index 858cdfab1..d5f0bc14d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/RemotePlayerConnectionHandler.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/multiplayer/RemotePlayerConnectionHandler.java @@ -77,9 +77,12 @@ public class RemotePlayerConnectionHandler implements Closeable } @Nullable - public ServerPlayerState getPlayer(IServerPlayerWrapper serverPlayer) + public ServerPlayerState getConnectedPlayer(IServerPlayerWrapper serverPlayer) { - return playersByUUID.get(serverPlayer.getUUID()); + ServerPlayerState player = playersByUUID.get(serverPlayer.getUUID()); + if (player == null || player.channelContext == null) + return null; + return player; } public void registerJoinedPlayer(IServerPlayerWrapper serverPlayer) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/NetworkEventSource.java b/core/src/main/java/com/seibel/distanthorizons/core/network/NetworkEventSource.java index d48d5296b..fcfc18fed 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/NetworkEventSource.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/NetworkEventSource.java @@ -86,11 +86,8 @@ public abstract class NetworkEventSource } } - if (!handled) - { - String error = "Unhandled message: " + message; - LOGGER.warn(error); - } + if (!handled && message.warnWhenUnhandled()) + LOGGER.warn("Unhandled message: " + message); } protected void addNewContext(ChannelHandlerContext ctx) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/updates/FullDataPartialUpdateMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/updates/FullDataPartialUpdateMessage.java index 3b51427f5..1524b3f26 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/updates/FullDataPartialUpdateMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/messages/fullData/updates/FullDataPartialUpdateMessage.java @@ -43,6 +43,9 @@ public class FullDataPartialUpdateMessage extends NetworkMessage private DhChunkPos chunkPos; private ByteBuf dataBuffer; + @Override + public boolean warnWhenUnhandled() { return false; } + public FullDataPartialUpdateMessage() {} public FullDataPartialUpdateMessage(ChunkSizedFullDataAccessor fullDataAccessor, DhServerLevel level) { diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/FutureTrackableNetworkMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/FutureTrackableNetworkMessage.java index f46bf36f6..a6e437e2d 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/FutureTrackableNetworkMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/FutureTrackableNetworkMessage.java @@ -33,12 +33,11 @@ import java.util.concurrent.atomic.AtomicInteger; public abstract class FutureTrackableNetworkMessage extends NetworkMessage { - private static final AtomicInteger lastId = new AtomicInteger(); // 32 bits - Context ID (not transmitted) // 1 bit - Requesting side (client - 0, server - 1) // 31 bits - Request ID - public long futureId = lastId.incrementAndGet() + public long futureId = lastId.getAndIncrement() | ((Objects.requireNonNull(SharedApi.getEnvironment()) == EWorldEnvironment.Server_Only ? 1 : 0) << 31); private static final AtomicInteger lastContextId = new AtomicInteger(); @@ -54,7 +53,7 @@ public abstract class FutureTrackableNetworkMessage extends NetworkMessage public void setChannelContext(ChannelHandlerContext channelContext) { super.setChannelContext(channelContext); - this.futureId |= (long) contextIds.computeIfAbsent(channelContext, k -> lastContextId.incrementAndGet()) << 32; + this.futureId |= (long) contextIds.computeIfAbsent(channelContext, k -> lastContextId.getAndIncrement()) << 32; } public void sendResponse(Exception e) diff --git a/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/NetworkMessage.java b/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/NetworkMessage.java index 2203b3398..4c5fb44c3 100644 --- a/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/NetworkMessage.java +++ b/core/src/main/java/com/seibel/distanthorizons/core/network/protocol/NetworkMessage.java @@ -22,12 +22,12 @@ package com.seibel.distanthorizons.core.network.protocol; import io.netty.channel.ChannelHandlerContext; import org.jetbrains.annotations.NotNull; -import javax.annotation.Nullable; - public abstract class NetworkMessage implements INetworkObject { private ChannelHandlerContext channelContext = null; + public boolean warnWhenUnhandled() { return true; } + public ChannelHandlerContext getChannelContext() { return channelContext;