Fix unhandled message spam in replay mod

This commit is contained in:
s809
2024-10-06 01:44:56 +05:00
parent cc8a2a70e8
commit 31fdf9fa43
3 changed files with 51 additions and 27 deletions
@@ -130,6 +130,11 @@ public class DhClientLevel extends AbstractDhLevel implements IDhClientLevel
this.networkEventSource.registerHandler(FullDataPartialUpdateMessage.class, message ->
{
if (MC_CLIENT.connectedToReplay())
{
return;
}
try
{
FullDataSourceV2DTO dataSourceDto = this.networkState.decodeDataSourceAndReleaseBuffer(message.payload);
@@ -90,8 +90,10 @@ public class ConfigBasedLogger
public void log(Level level, String str, Object... param)
{
Message msg = param.length > 0
? this.logger.getMessageFactory().newMessage(str, param)
: this.logger.getMessageFactory().newMessage("{}", str);
Message msg = logger.getMessageFactory().newMessage(str, param);
String msgStr = msg.getFormattedMessage();
if (mode.levelForFile.isLessSpecificThan(level))
{
@@ -2,6 +2,7 @@ package com.seibel.distanthorizons.core.multiplayer.client;
import com.google.common.cache.CacheBuilder;
import com.seibel.distanthorizons.core.config.Config;
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
import com.seibel.distanthorizons.core.logging.ConfigBasedLogger;
import com.seibel.distanthorizons.core.multiplayer.config.SessionConfig;
import com.seibel.distanthorizons.core.network.INetworkObject;
@@ -10,12 +11,14 @@ import com.seibel.distanthorizons.core.network.event.internal.CloseInternalEvent
import com.seibel.distanthorizons.core.network.event.internal.IncompatibleMessageInternalEvent;
import com.seibel.distanthorizons.core.network.messages.base.CurrentLevelKeyMessage;
import com.seibel.distanthorizons.core.network.messages.base.SessionConfigMessage;
import com.seibel.distanthorizons.core.network.messages.fullData.FullDataSourceResponseMessage;
import com.seibel.distanthorizons.core.network.messages.fullData.FullDataSplitMessage;
import com.seibel.distanthorizons.core.network.messages.fullData.FullDataPartialUpdateMessage;
import com.seibel.distanthorizons.core.network.messages.fullData.FullDataPayload;
import com.seibel.distanthorizons.core.network.session.NetworkSession;
import com.seibel.distanthorizons.core.sql.dto.FullDataSourceV2DTO;
import com.seibel.distanthorizons.core.util.LodUtil;
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
import com.seibel.distanthorizons.coreapi.ModInfo;
import io.netty.buffer.ByteBufAllocator;
import io.netty.buffer.CompositeByteBuf;
@@ -32,6 +35,8 @@ public class ClientNetworkState implements Closeable
protected static final ConfigBasedLogger LOGGER = new ConfigBasedLogger(LogManager.getLogger(),
() -> Config.Client.Advanced.Logging.logNetworkEvent.get());
private static final IMinecraftClientWrapper MC_CLIENT = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
private final ConcurrentMap<Integer, CompositeByteBuf> fullDataBufferById = CacheBuilder.newBuilder()
.expireAfterAccess(10, TimeUnit.SECONDS)
@@ -85,41 +90,53 @@ public class ClientNetworkState implements Closeable
}
});
this.networkSession.registerHandler(SessionConfigMessage.class, message ->
{
this.serverSupportStatus = EServerSupportStatus.FULL;
LOGGER.info("Connection config has been changed: ["+message.config+"].");
this.sessionConfig = message.config;
this.configReceived = true;
});
this.networkSession.registerHandler(CloseInternalEvent.class, message ->
{
this.configReceived = false;
});
this.networkSession.registerHandler(FullDataSplitMessage.class, message ->
{
if (message.isFirst)
{
CompositeByteBuf composite = this.fullDataBufferById.remove(message.bufferId);
if (composite != null)
{
composite.release();
LOGGER.debug("Released full data buffer ["+message.bufferId+"]: ["+composite+"]");
}
}
CompositeByteBuf byteBuffer = this.fullDataBufferById.computeIfAbsent(message.bufferId, bufferId -> ByteBufAllocator.DEFAULT.compositeBuffer());
byteBuffer.addComponent(true, message.buffer);
LOGGER.debug("Full data buffer ["+message.bufferId+"]: ["+byteBuffer+"].");
});
this.networkSession.registerHandler(FullDataPartialUpdateMessage.class, msg ->
{
// Dummy handler to prevent unhandled message warnings
});
if (MC_CLIENT.connectedToReplay())
{
// Prevent handling specific messages because replay server is not interactive.
// Level keys are still good because they don't affect anything other than level loading.
this.networkSession.registerHandler(SessionConfigMessage.class, message -> { });
this.networkSession.registerHandler(FullDataSourceResponseMessage.class, message -> { });
this.networkSession.registerHandler(FullDataSplitMessage.class, message -> { });
}
else
{
this.networkSession.registerHandler(SessionConfigMessage.class, message ->
{
this.serverSupportStatus = EServerSupportStatus.FULL;
LOGGER.info("Connection config has been changed: [" + message.config + "].");
this.sessionConfig = message.config;
this.configReceived = true;
});
this.networkSession.registerHandler(FullDataSplitMessage.class, message ->
{
if (message.isFirst)
{
CompositeByteBuf composite = this.fullDataBufferById.remove(message.bufferId);
if (composite != null)
{
composite.release();
LOGGER.debug("Released full data buffer [" + message.bufferId + "]: [" + composite + "]");
}
}
CompositeByteBuf byteBuffer = this.fullDataBufferById.computeIfAbsent(message.bufferId, bufferId -> ByteBufAllocator.DEFAULT.compositeBuffer());
byteBuffer.addComponent(true, message.buffer);
LOGGER.debug("Full data buffer [" + message.bufferId + "]: [" + byteBuffer + "].");
});
}
}