kozukata-toa/src/servers/titles/chunithm/versions/100-base.ts

198 lines
5.2 KiB
TypeScript

import { ChunithmStaticCharge, ChunithmStaticEvent } from "external/db/entity/chunithm/static";
import CreateLogCtx from "lib/logger/logger";
import { DateTime } from "luxon";
import { BaseTitle } from "servers/titles/types/titles";
import type { Request, Response } from "express";
import type { ITitle } from "servers/titles/types/titles";
const logger = CreateLogCtx(__filename);
export class Chunithm extends BaseTitle implements ITitle {
private readonly dateTimeFormat = "yyyy-MM-dd HH:mm:ss";
constructor(gameCode?: string, version?: string, servletName?: string) {
super(gameCode ?? "SDBT", version ?? "100", servletName ?? "ChuniServlet");
}
protected createGetGameSettingsApiResponse(_req: Request, _res: Response) {
// HACK: This is not the way to go if you're somehow hosting an arcade server
// from my code, and wants your machines to actually restart sometimes.
const rebootStartTime = DateTime.now().minus({ hours: 4 }).toFormat(this.dateTimeFormat);
const rebootEndTime = DateTime.now().minus({ hours: 3 }).toFormat(this.dateTimeFormat);
return {
gameSetting: {
dataVersion: "1.00.00",
isMaintenance: "false",
requestInterval: "10",
rebootStartTime,
rebootEndTime,
isBackgroundDistribute: "false",
maxCountCharacter: "300",
maxCountItem: "300",
maxCountMusic: "300",
},
isDumpUpload: "false",
isAou: "false",
};
}
/**
* @note override {@link createGetGameSettingsApiResponse} in order to modify this
* method's response
* @since CHUNITHM
*/
handle_GetGameSettingsApi(req: Request, res: Response) {
const resp = this.createGetGameSettingsApiResponse(req, res);
return res.status(200).send(resp);
}
handle_UpsertClientSettingApi(req: Request, res: Response) {
return res.status(200).send({ returnCode: "1" });
}
handle_UpsertClientTestmodeApi(req: Request, res: Response) {
return res.status(200).send({ returnCode: "1" });
}
handle_GetGameIdlistApi(req: Request, res: Response) {
return res.status(200).send({ type: req.safeBody.type, length: "0", gameIdlistList: [] });
}
async handle_GetGameEventApi(req: Request, res: Response) {
const events = await ChunithmStaticEvent.find({
where: {
enabled: true,
version: this.numericVersion,
},
});
if (events.length === 0) {
logger.warn("No events are enabled.", {
gameCode: this.gameCode,
version: this.version,
});
}
// HACK: We may want to rotate events...
return res.send({
type: req.safeBody.type,
length: events.length.toString(),
gameEventList: events.map((e) => ({
id: e.eventId.toString(),
type: e.type.toString(),
startDate: DateTime.fromJSDate(e.startDate).toFormat(this.dateTimeFormat),
endDate: "2099-12-31 00:00:00",
})),
});
}
handle_GetGameRankingApi(req: Request, res: Response) {
// TODO
return res.send({
type: req.safeBody.type,
length: "0",
gameRankingList: [],
});
}
async handle_GetGameChargeApi(req: Request, res: Response) {
const charges = await ChunithmStaticCharge.find({
where: {
enabled: true,
version: this.numericVersion,
},
});
if (charges.length === 0) {
logger.warn("No charges (tickets) are enabled.", {
gameCode: this.gameCode,
version: this.version,
});
}
// HACK
return res.send({
length: charges.length.toString(),
gameChargeList: charges.map((c, i) => ({
orderId: i.toString(),
chargeId: c.chargeId.toString(),
price: "1",
startDate: "2017-12-05 07:00:00.0",
endDate: "2099-12-31 00:00:00.0",
salePrice: "1",
saleStartDate: "2017-12-05 07:00:00.0",
saleEndDate: "2099-12-31 00:00:00.0",
})),
});
}
handle_GetUserPreviewApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GameLoginApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserDataApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserOptionApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserCharacterApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserActivityApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserItemApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserRecentRatingApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserMusicApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserRegionApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserFavoriteItemApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserLoginBonusApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserMapAreaApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GetUserSymbolChatSettingApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
/**
* @since NEW
*/
handle_GetUserNetBattleDataApi(req: Request, res: Response) {
throw new Error("Unimplemented");
}
handle_GameLogoutApi(req: Request, res: Response) {
return res.status(200).send({ returnCode: "1" });
}
}