mirror of
https://github.com/Melledy/LunarCore.git
synced 2025-12-14 22:34:35 +01:00
Prevent packet spam
This commit is contained in:
@@ -5,10 +5,7 @@ import java.util.Set;
|
|||||||
import org.reflections.Reflections;
|
import org.reflections.Reflections;
|
||||||
|
|
||||||
import emu.lunarcore.LunarCore;
|
import emu.lunarcore.LunarCore;
|
||||||
import emu.lunarcore.server.packet.CmdId;
|
import emu.lunarcore.server.packet.*;
|
||||||
import emu.lunarcore.server.packet.Opcodes;
|
|
||||||
import emu.lunarcore.server.packet.PacketHandler;
|
|
||||||
import emu.lunarcore.server.packet.SessionState;
|
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||||
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
|
||||||
|
|
||||||
@@ -51,6 +48,15 @@ public class GameServerPacketHandler {
|
|||||||
PacketHandler handler = this.handlers.get(cmdId);
|
PacketHandler handler = this.handlers.get(cmdId);
|
||||||
|
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
|
// Check cooldown to prevent packet spam
|
||||||
|
long timestamp = System.currentTimeMillis();
|
||||||
|
if (session.getPacketCooldown().get(cmdId) >= timestamp) {
|
||||||
|
//LunarCore.getLogger().warn("Dropped a packet " + CmdIdUtils.getCmdIdName(cmdId));
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
session.getPacketCooldown().put(cmdId, timestamp + 5);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Make sure session is ready for packets
|
// Make sure session is ready for packets
|
||||||
SessionState state = session.getState();
|
SessionState state = session.getState();
|
||||||
@@ -76,8 +82,6 @@ public class GameServerPacketHandler {
|
|||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
return; // Packet successfully handled
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log unhandled packets
|
// Log unhandled packets
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ import emu.lunarcore.server.packet.SessionState;
|
|||||||
import emu.lunarcore.util.Utils;
|
import emu.lunarcore.util.Utils;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.buffer.Unpooled;
|
import io.netty.buffer.Unpooled;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2LongMap;
|
||||||
|
import it.unimi.dsi.fastutil.ints.Int2LongOpenHashMap;
|
||||||
import kcp.highway.Ukcp;
|
import kcp.highway.Ukcp;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -18,6 +20,7 @@ import lombok.Getter;
|
|||||||
@Getter
|
@Getter
|
||||||
public class GameSession {
|
public class GameSession {
|
||||||
private final GameServer server;
|
private final GameServer server;
|
||||||
|
private final Int2LongMap packetCooldown;
|
||||||
private InetSocketAddress address;
|
private InetSocketAddress address;
|
||||||
|
|
||||||
private Account account;
|
private Account account;
|
||||||
@@ -32,6 +35,7 @@ public class GameSession {
|
|||||||
|
|
||||||
private GameSession(GameServer server) {
|
private GameSession(GameServer server) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
|
this.packetCooldown = new Int2LongOpenHashMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
public GameSession(GameServer server, Ukcp ukcp) {
|
public GameSession(GameServer server, Ukcp ukcp) {
|
||||||
|
|||||||
@@ -3,7 +3,5 @@ package emu.lunarcore.server.packet;
|
|||||||
import emu.lunarcore.server.game.GameSession;
|
import emu.lunarcore.server.game.GameSession;
|
||||||
|
|
||||||
public abstract class PacketHandler {
|
public abstract class PacketHandler {
|
||||||
protected static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
|
|
||||||
|
|
||||||
public abstract void handle(GameSession session, byte[] data) throws Exception;
|
public abstract void handle(GameSession session, byte[] data) throws Exception;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user