Finished Chunk Data Transfere if Paylouad size exeeds maximum

This commit is contained in:
Frank 2021-08-23 10:09:38 +02:00
parent 63830a27d6
commit 5c6d6a4cb0
5 changed files with 145 additions and 46 deletions

View file

@ -15,8 +15,10 @@ import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.network.ServerGamePacketListenerImpl;
import ru.bclib.BCLib;
import ru.bclib.api.dataexchange.handler.autosync.Chunker.FileChunkSender;
import ru.bclib.api.dataexchange.handler.autosync.Chunker;
import ru.bclib.api.dataexchange.handler.autosync.Chunker.PacketChunkSender;
import java.util.Collection;
import java.util.List;
public abstract class DataHandler extends BaseDataHandler {
@ -71,14 +73,7 @@ public abstract class DataHandler extends BaseDataHandler {
FriendlyByteBuf buf = PacketByteBufs.create();
serializeData(buf, false);
if (buf.readableBytes()>1024*1024) {
final FileChunkSender sender = new FileChunkSender(buf);
sender.sendChunks(PlayerLookup.all(server));
} else {
for (ServerPlayer player : PlayerLookup.all(server)) {
ServerPlayNetworking.send(player, getIdentifier(), buf);
}
}
_sendToClient(getIdentifier(), server, PlayerLookup.all(server), buf);
}
}
@ -87,11 +82,19 @@ public abstract class DataHandler extends BaseDataHandler {
if (prepareData(false)) {
FriendlyByteBuf buf = PacketByteBufs.create();
serializeData(buf, false);
if (buf.readableBytes()>1024*1024) {
final FileChunkSender sender = new FileChunkSender(buf);
sender.sendChunks(List.of(player));
} else {
ServerPlayNetworking.send(player, getIdentifier(), buf);
_sendToClient(getIdentifier(), server, List.of(player), buf);
}
}
public static void _sendToClient(ResourceLocation identifier, MinecraftServer server, Collection<ServerPlayer> players, FriendlyByteBuf buf) {
if (buf.readableBytes()> Chunker.MAX_PACKET_SIZE) {
final PacketChunkSender sender = new PacketChunkSender(buf, identifier);
sender.sendChunks(players);
} else {
for (ServerPlayer player : players) {
ServerPlayNetworking.send(player, identifier, buf);
}
}
}
@ -226,15 +229,17 @@ public abstract class DataHandler extends BaseDataHandler {
BCLib.LOGGER.error("[Internal Error] The message '" + getIdentifier() + "' must originate from the server!");
}
public void receiveFromMemory(FriendlyByteBuf buf){
receiveFromServer(Minecraft.getInstance(), null, buf, null);
}
@Override
final void sendToClient(MinecraftServer server) {
if (prepareDataOnServer()) {
FriendlyByteBuf buf = PacketByteBufs.create();
serializeDataOnServer(buf);
for (ServerPlayer player : PlayerLookup.all(server)) {
ServerPlayNetworking.send(player, getIdentifier(), buf);
}
_sendToClient(getIdentifier(), server, PlayerLookup.all(server), buf);
}
}
@ -243,7 +248,8 @@ public abstract class DataHandler extends BaseDataHandler {
if (prepareDataOnServer()) {
FriendlyByteBuf buf = PacketByteBufs.create();
serializeDataOnServer(buf);
ServerPlayNetworking.send(player, getIdentifier(), buf);
_sendToClient(getIdentifier(), server, List.of(player), buf);
}
}