Fix chunk updates sent to incomplete connections

Hide useless warns, for cases when listener is not configured yet
This commit is contained in:
s809
2023-09-19 18:53:10 +05:00
parent 2cfc2c81c8
commit fccd197cd5
6 changed files with 16 additions and 19 deletions
@@ -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));
}
});
@@ -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)
@@ -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)
@@ -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)
{
@@ -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)
@@ -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;