mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-19 10:24:47 +01:00
Implement packet send/receive events
This commit is contained in:
@@ -2,6 +2,7 @@ package emu.grasscutter.server.game;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import emu.grasscutter.server.event.game.ReceivePacketEvent;
|
||||
import org.reflections.Reflections;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
@@ -48,9 +49,7 @@ public class GameServerPacketHandler {
|
||||
}
|
||||
|
||||
public void handle(GameSession session, int opcode, byte[] header, byte[] payload) {
|
||||
PacketHandler handler = null;
|
||||
|
||||
handler = this.handlers.get(opcode);
|
||||
PacketHandler handler = this.handlers.get(opcode);
|
||||
|
||||
if (handler != null) {
|
||||
try {
|
||||
@@ -77,8 +76,10 @@ public class GameServerPacketHandler {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle
|
||||
handler.handle(session, header, payload);
|
||||
// Invoke event.
|
||||
ReceivePacketEvent event = new ReceivePacketEvent(session, opcode, payload); event.call();
|
||||
if(!event.isCanceled()) // If event is not canceled, continue.
|
||||
handler.handle(session, header, event.getPacketData());
|
||||
} catch (Exception ex) {
|
||||
// TODO Remove this when no more needed
|
||||
ex.printStackTrace();
|
||||
|
||||
@@ -10,6 +10,7 @@ import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.net.packet.GenshinPacket;
|
||||
import emu.grasscutter.net.packet.PacketOpcodesUtil;
|
||||
import emu.grasscutter.netty.MihoyoKcpChannel;
|
||||
import emu.grasscutter.server.event.game.SendPacketEvent;
|
||||
import emu.grasscutter.utils.Crypto;
|
||||
import emu.grasscutter.utils.FileUtils;
|
||||
import emu.grasscutter.utils.Utils;
|
||||
@@ -161,16 +162,15 @@ public class GameSession extends MihoyoKcpChannel {
|
||||
genshinPacket.buildHeader(this.getNextClientSequence());
|
||||
}
|
||||
|
||||
// Build packet
|
||||
byte[] data = genshinPacket.build();
|
||||
|
||||
// Log
|
||||
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
|
||||
logPacket(genshinPacket);
|
||||
}
|
||||
|
||||
// Send
|
||||
send(data);
|
||||
|
||||
// Invoke event.
|
||||
SendPacketEvent event = new SendPacketEvent(this, genshinPacket); event.call();
|
||||
if(!event.isCanceled()) // If event is not cancelled, continue.
|
||||
this.send(event.getPacket().build());
|
||||
}
|
||||
|
||||
private void logPacket(int opcode) {
|
||||
|
||||
Reference in New Issue
Block a user