mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-19 18:34:49 +01:00
Implement gacha history record subsystem
* Frontend is not very beautiful yet * Didn't include too much `some anime game` data in the page to avoid being DMCA'd
This commit is contained in:
@@ -18,6 +18,7 @@ import emu.grasscutter.server.dispatch.json.*;
|
||||
import emu.grasscutter.server.dispatch.json.ComboTokenReqJson.LoginTokenData;
|
||||
import emu.grasscutter.server.event.dispatch.QueryAllRegionsEvent;
|
||||
import emu.grasscutter.server.event.dispatch.QueryCurrentRegionEvent;
|
||||
import emu.grasscutter.server.http.gacha.GachaRecordHandler;
|
||||
import emu.grasscutter.utils.FileUtils;
|
||||
import express.Express;
|
||||
import org.eclipse.jetty.server.Connector;
|
||||
@@ -485,7 +486,7 @@ public final class DispatchServer {
|
||||
// webstatic-sea.hoyoverse.com
|
||||
httpServer.get("/admin/mi18n/plat_oversea/m202003048/m202003048-version.json", new DispatchHttpJsonHandler("{\"version\":51}"));
|
||||
|
||||
httpServer.get("/gacha", (req, res) -> res.send("<!doctype html><html lang=\"en\"><head><title>Gacha</title></head><body></body></html>"));
|
||||
httpServer.get("/gacha", new GachaRecordHandler());
|
||||
|
||||
httpServer.listen(Grasscutter.getConfig().getDispatchOptions().Port);
|
||||
Grasscutter.getLogger().info("[Dispatch] Dispatch server started on port " + httpServer.raw().port());
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
package emu.grasscutter.server.http.gacha;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import emu.grasscutter.Grasscutter;
|
||||
import emu.grasscutter.database.DatabaseHelper;
|
||||
import emu.grasscutter.game.Account;
|
||||
import emu.grasscutter.utils.FileUtils;
|
||||
import express.http.HttpContextHandler;
|
||||
import express.http.Request;
|
||||
import express.http.Response;
|
||||
|
||||
public final class GachaRecordHandler implements HttpContextHandler {
|
||||
String render_template;
|
||||
public GachaRecordHandler() {
|
||||
File template = new File(Grasscutter.getConfig().DATA_FOLDER + "gacha_records.html");
|
||||
if (template.exists()) {
|
||||
// Load from cache
|
||||
render_template = new String(FileUtils.read(template));
|
||||
} else {
|
||||
render_template = "{{REPLACE_RECORD}}";
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handle(Request req, Response res) throws IOException {
|
||||
// Grasscutter.getLogger().info( req.query().toString() );
|
||||
String sessionKey = req.query("s");
|
||||
int page = 0;
|
||||
int gachaType = 0;
|
||||
if (req.query("p") != null) {
|
||||
page = Integer.valueOf(req.query("p"));
|
||||
}
|
||||
|
||||
if (req.query("gachaType") != null) {
|
||||
gachaType = Integer.valueOf(req.query("gachaType"));
|
||||
}
|
||||
|
||||
Account account = DatabaseHelper.getAccountBySessionKey(sessionKey);
|
||||
if (account != null) {
|
||||
String records = DatabaseHelper.getGachaRecords(account.getPlayerUid(), page, gachaType).toString();
|
||||
// Grasscutter.getLogger().info(records);
|
||||
String response = render_template.replace("{{REPLACE_RECORD}}", records)
|
||||
.replace("{{REPLACE_MAXPAGE}}", String.valueOf(DatabaseHelper.getGachaRecordsMaxPage(account.getPlayerUid(), page, gachaType)));
|
||||
|
||||
res.send(response);
|
||||
} else {
|
||||
res.send("404");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,10 @@ public class HandlerGetGachaInfoReq extends PacketHandler {
|
||||
|
||||
@Override
|
||||
public void handle(GameSession session, byte[] header, byte[] payload) throws Exception {
|
||||
session.send(new PacketGetGachaInfoRsp(session.getServer().getGachaManager()));
|
||||
session.send(new PacketGetGachaInfoRsp(session.getServer().getGachaManager(),
|
||||
// TODO: use other Nonce/key insteadof session key to ensure the overall security for the player
|
||||
session.getPlayer().getAccount().getSessionKey())
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,9 +6,17 @@ import emu.grasscutter.net.packet.PacketOpcodes;
|
||||
|
||||
public class PacketGetGachaInfoRsp extends BasePacket {
|
||||
|
||||
@Deprecated
|
||||
public PacketGetGachaInfoRsp(GachaManager manager) {
|
||||
super(PacketOpcodes.GetGachaInfoRsp);
|
||||
|
||||
this.setData(manager.toProto());
|
||||
}
|
||||
|
||||
public PacketGetGachaInfoRsp(GachaManager manager, String sessionKey) {
|
||||
super(PacketOpcodes.GetGachaInfoRsp);
|
||||
|
||||
this.setData(manager.toProto(sessionKey));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user