mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Use every thread available to the JVM, in a work stealing pool for packet handling
This commit is contained in:
@@ -1,7 +1,5 @@
|
|||||||
package emu.grasscutter.server.game;
|
package emu.grasscutter.server.game;
|
||||||
|
|
||||||
import static emu.grasscutter.config.Configuration.GAME_INFO;
|
|
||||||
|
|
||||||
import emu.grasscutter.Grasscutter;
|
import emu.grasscutter.Grasscutter;
|
||||||
import emu.grasscutter.Grasscutter.ServerDebugMode;
|
import emu.grasscutter.Grasscutter.ServerDebugMode;
|
||||||
import emu.grasscutter.net.packet.*;
|
import emu.grasscutter.net.packet.*;
|
||||||
@@ -9,6 +7,8 @@ import emu.grasscutter.server.event.game.ReceivePacketEvent;
|
|||||||
import emu.grasscutter.server.game.GameSession.SessionState;
|
import emu.grasscutter.server.game.GameSession.SessionState;
|
||||||
import it.unimi.dsi.fastutil.ints.*;
|
import it.unimi.dsi.fastutil.ints.*;
|
||||||
|
|
||||||
|
import static emu.grasscutter.config.Configuration.GAME_INFO;
|
||||||
|
|
||||||
public final class GameServerPacketHandler {
|
public final class GameServerPacketHandler {
|
||||||
private final Int2ObjectMap<PacketHandler> handlers;
|
private final Int2ObjectMap<PacketHandler> handlers;
|
||||||
|
|
||||||
@@ -76,13 +76,11 @@ public final class GameServerPacketHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Invoke event.
|
// Invoke event.
|
||||||
ReceivePacketEvent event = new ReceivePacketEvent(session, opcode, payload);
|
var event = new ReceivePacketEvent(session, opcode, payload);
|
||||||
event.call();
|
if (!event.call()) // If event is not canceled, continue.
|
||||||
if (!event.isCanceled()) // If event is not canceled, continue.
|
handler.handle(session, header, event.getPacketData());
|
||||||
handler.handle(session, header, event.getPacketData());
|
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
// TODO Remove this when no more needed
|
Grasscutter.getLogger().warn("Unable to handle packet.", ex);
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
}
|
||||||
return; // Packet successfully handled
|
return; // Packet successfully handled
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ public final class GameSessionManager implements KcpListener {
|
|||||||
@Getter private static final GameSessionManager instance
|
@Getter private static final GameSessionManager instance
|
||||||
= new GameSessionManager();
|
= new GameSessionManager();
|
||||||
@Getter private static final ExecutorService executor
|
@Getter private static final ExecutorService executor
|
||||||
= Executors.newFixedThreadPool(4);
|
= Executors.newWorkStealingPool();
|
||||||
@Getter private static final Map<Ukcp, GameSession> sessions
|
@Getter private static final Map<Ukcp, GameSession> sessions
|
||||||
= new ConcurrentHashMap<>();
|
= new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user