Fix chunk updates sent to incomplete connections
Hide useless warns, for cases when listener is not configured yet
This commit is contained in:
@@ -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));
|
||||
}
|
||||
});
|
||||
|
||||
+5
-2
@@ -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)
|
||||
|
||||
+3
@@ -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)
|
||||
{
|
||||
|
||||
+2
-3
@@ -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)
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user