Commit a2069c00 authored by Benjamin Elsdon's avatar Benjamin Elsdon
Browse files

Merge remote-tracking branch 'upstream/development' into dev-mail

parents a5677a8e c4bdcc38
package emu.grasscutter.server.event.dispatch;
import emu.grasscutter.server.event.ServerEvent;
public final class QueryAllRegionsEvent extends ServerEvent {
private String regionList;
public QueryAllRegionsEvent(String regionList) {
super(Type.DISPATCH);
this.regionList = regionList;
}
public void setRegionList(String regionList) {
this.regionList = regionList;
}
public String getRegionList() {
return this.regionList;
}
}
package emu.grasscutter.server.event.dispatch;
import emu.grasscutter.server.event.ServerEvent;
public final class QueryCurrentRegionEvent extends ServerEvent {
private String regionInfo;
public QueryCurrentRegionEvent(String regionInfo) {
super(Type.DISPATCH);
this.regionInfo = regionInfo;
}
public void setRegionInfo(String regionInfo) {
this.regionInfo = regionInfo;
}
public String getRegionInfo() {
return this.regionInfo;
}
}
package emu.grasscutter.server.event.game;
import emu.grasscutter.server.event.Cancellable;
import emu.grasscutter.server.event.ServerEvent;
import emu.grasscutter.server.game.GameSession;
public final class ReceivePacketEvent extends ServerEvent implements Cancellable {
private final GameSession gameSession;
private final int packetId;
private byte[] packetData;
public ReceivePacketEvent(GameSession gameSession, int packetId, byte[] packetData) {
super(Type.GAME);
this.gameSession = gameSession;
this.packetId = packetId;
this.packetData = packetData;
}
public GameSession getGameSession() {
return this.gameSession;
}
public int getPacketId() {
return this.packetId;
}
public void setPacketData(byte[] packetData) {
this.packetData = packetData;
}
public byte[] getPacketData() {
return this.packetData;
}
}
package emu.grasscutter.server.event.game;
import emu.grasscutter.net.packet.GenshinPacket;
import emu.grasscutter.server.event.Cancellable;
import emu.grasscutter.server.event.ServerEvent;
import emu.grasscutter.server.game.GameSession;
public final class SendPacketEvent extends ServerEvent implements Cancellable {
private final GameSession gameSession;
private GenshinPacket packet;
public SendPacketEvent(GameSession gameSession, GenshinPacket packet) {
super(Type.GAME);
this.gameSession = gameSession;
this.packet = packet;
}
public GameSession getGameSession() {
return this.gameSession;
}
public void setPacket(GenshinPacket packet) {
this.packet = packet;
}
public GenshinPacket getPacket() {
return this.packet;
}
}
...@@ -2,6 +2,7 @@ package emu.grasscutter.server.game; ...@@ -2,6 +2,7 @@ package emu.grasscutter.server.game;
import java.util.Set; import java.util.Set;
import emu.grasscutter.server.event.game.ReceivePacketEvent;
import org.reflections.Reflections; import org.reflections.Reflections;
import emu.grasscutter.Grasscutter; import emu.grasscutter.Grasscutter;
...@@ -48,9 +49,7 @@ public class GameServerPacketHandler { ...@@ -48,9 +49,7 @@ public class GameServerPacketHandler {
} }
public void handle(GameSession session, int opcode, byte[] header, byte[] payload) { public void handle(GameSession session, int opcode, byte[] header, byte[] payload) {
PacketHandler handler = null; PacketHandler handler = this.handlers.get(opcode);
handler = this.handlers.get(opcode);
if (handler != null) { if (handler != null) {
try { try {
...@@ -77,8 +76,10 @@ public class GameServerPacketHandler { ...@@ -77,8 +76,10 @@ public class GameServerPacketHandler {
} }
} }
// Handle // Invoke event.
handler.handle(session, header, payload); 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) { } catch (Exception ex) {
// TODO Remove this when no more needed // TODO Remove this when no more needed
ex.printStackTrace(); ex.printStackTrace();
......
...@@ -10,6 +10,7 @@ import emu.grasscutter.game.GenshinPlayer; ...@@ -10,6 +10,7 @@ import emu.grasscutter.game.GenshinPlayer;
import emu.grasscutter.net.packet.GenshinPacket; import emu.grasscutter.net.packet.GenshinPacket;
import emu.grasscutter.net.packet.PacketOpcodesUtil; import emu.grasscutter.net.packet.PacketOpcodesUtil;
import emu.grasscutter.netty.MihoyoKcpChannel; import emu.grasscutter.netty.MihoyoKcpChannel;
import emu.grasscutter.server.event.game.SendPacketEvent;
import emu.grasscutter.utils.Crypto; import emu.grasscutter.utils.Crypto;
import emu.grasscutter.utils.FileUtils; import emu.grasscutter.utils.FileUtils;
import emu.grasscutter.utils.Utils; import emu.grasscutter.utils.Utils;
...@@ -161,16 +162,15 @@ public class GameSession extends MihoyoKcpChannel { ...@@ -161,16 +162,15 @@ public class GameSession extends MihoyoKcpChannel {
genshinPacket.buildHeader(this.getNextClientSequence()); genshinPacket.buildHeader(this.getNextClientSequence());
} }
// Build packet
byte[] data = genshinPacket.build();
// Log // Log
if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) { if (Grasscutter.getConfig().getGameServerOptions().LOG_PACKETS) {
logPacket(genshinPacket); logPacket(genshinPacket);
} }
// Send // Invoke event.
send(data); 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) { private void logPacket(int opcode) {
......
...@@ -137,6 +137,15 @@ public final class Utils { ...@@ -137,6 +137,15 @@ public final class Utils {
return nonNull != null ? nonNull : fallback; return nonNull != null ? nonNull : fallback;
} }
/**
* Logs an object to the console.
* @param object The object to log.
*/
public static void logObject(Object object) {
String asJson = Grasscutter.getGsonFactory().toJson(object);
Grasscutter.getLogger().info(asJson);
}
/** /**
* Checks for required files and folders before startup. * Checks for required files and folders before startup.
*/ */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment