mirror of https://github.com/hykilpikonna/AquaDX
[DIVA] Add stage result index to prevent multiple result being sent by client, fix #3
parent
b70ec89902
commit
ce780b2edb
|
@ -70,6 +70,7 @@ public class CardProcedureHandler extends BaseHandler {
|
||||||
LocalDateTime.now(),
|
LocalDateTime.now(),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
|
-1,
|
||||||
profile.getLevel(),
|
profile.getLevel(),
|
||||||
profile.getLevelExp(),
|
profile.getLevelExp(),
|
||||||
profile.getLevel(),
|
profile.getLevel(),
|
||||||
|
|
|
@ -61,6 +61,9 @@ public class StageResultHandler extends BaseHandler {
|
||||||
int[] pvIds = request.getStg_ply_pv_id();
|
int[] pvIds = request.getStg_ply_pv_id();
|
||||||
int stageIndex = session.getStageIndex();
|
int stageIndex = session.getStageIndex();
|
||||||
|
|
||||||
|
// Only save to database when stage index is larger than stage result index to prevent duplicate request.
|
||||||
|
if(stageIndex > session.getStageResultIndex()) {
|
||||||
|
|
||||||
// Convert to play log object
|
// Convert to play log object
|
||||||
PlayLog log = getLog(request, profile, stageIndex);
|
PlayLog log = getLog(request, profile, stageIndex);
|
||||||
logger.debug("Stage Result Object: {}", log.toString());
|
logger.debug("Stage Result Object: {}", log.toString());
|
||||||
|
@ -95,10 +98,13 @@ public class StageResultHandler extends BaseHandler {
|
||||||
session.setLevelNumber(levelInfo.getLevelNumber());
|
session.setLevelNumber(levelInfo.getLevelNumber());
|
||||||
session.setLevelExp(levelInfo.getLevelExp());
|
session.setLevelExp(levelInfo.getLevelExp());
|
||||||
|
|
||||||
|
session.setStageResultIndex(session.getStageResultIndex() + 1);
|
||||||
|
|
||||||
pvRecordRepository.save(record);
|
pvRecordRepository.save(record);
|
||||||
playLogRepository.save(log);
|
playLogRepository.save(log);
|
||||||
gameSessionRepository.save(session);
|
gameSessionRepository.save(session);
|
||||||
// profileRepository.save(profile); // Profile save move to session end
|
|
||||||
|
}
|
||||||
|
|
||||||
response = new StageResultResponse(
|
response = new StageResultResponse(
|
||||||
request.getCmd(),
|
request.getCmd(),
|
||||||
|
|
|
@ -36,9 +36,12 @@ public class StageStartHandler extends BaseHandler {
|
||||||
PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new);
|
PlayerProfile profile = profileRepository.findByPdId(request.getPd_id()).orElseThrow(ProfileNotFoundException::new);
|
||||||
GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new);
|
GameSession session = gameSessionRepository.findByPdId(profile).orElseThrow(SessionNotFoundException::new);
|
||||||
|
|
||||||
|
if(session.getStageResultIndex() <= session.getStageIndex()) {
|
||||||
session.setStageIndex(session.getStageIndex() + 1);
|
session.setStageIndex(session.getStageIndex() + 1);
|
||||||
|
|
||||||
gameSessionRepository.save(session);
|
gameSessionRepository.save(session);
|
||||||
|
} else {
|
||||||
|
logger.warn("Stage index is greater than stage result index. Maybe due to duplicated request.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseResponse response = new BaseResponse(
|
BaseResponse response = new BaseResponse(
|
||||||
|
|
|
@ -83,6 +83,7 @@ public class PreStartHandler extends BaseHandler {
|
||||||
LocalDateTime.now(),
|
LocalDateTime.now(),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
|
-1,
|
||||||
profile.getLevel(),
|
profile.getLevel(),
|
||||||
profile.getLevelExp(),
|
profile.getLevelExp(),
|
||||||
profile.getLevel(),
|
profile.getLevel(),
|
||||||
|
|
|
@ -40,6 +40,8 @@ public class GameSession implements Serializable {
|
||||||
|
|
||||||
private Integer stageIndex;
|
private Integer stageIndex;
|
||||||
|
|
||||||
|
private Integer stageResultIndex;
|
||||||
|
|
||||||
private Integer lastPvId;
|
private Integer lastPvId;
|
||||||
|
|
||||||
private Integer levelNumber;
|
private Integer levelNumber;
|
||||||
|
@ -52,13 +54,14 @@ public class GameSession implements Serializable {
|
||||||
|
|
||||||
private Integer vp;
|
private Integer vp;
|
||||||
|
|
||||||
public GameSession(int acceptId, PlayerProfile pdId, StartMode startMode, LocalDateTime startTime, LocalDateTime lastUpdateTime, Integer stageIndex, Integer lastPvId, Integer levelNumber, Integer levelExp, Integer oldLevelNumber, Integer oldLevelExp, Integer vp) {
|
public GameSession(int acceptId, PlayerProfile pdId, StartMode startMode, LocalDateTime startTime, LocalDateTime lastUpdateTime, Integer stageIndex, Integer stageResultIndex, Integer lastPvId, Integer levelNumber, Integer levelExp, Integer oldLevelNumber, Integer oldLevelExp, Integer vp) {
|
||||||
this.acceptId = acceptId;
|
this.acceptId = acceptId;
|
||||||
this.pdId = pdId;
|
this.pdId = pdId;
|
||||||
this.startMode = startMode;
|
this.startMode = startMode;
|
||||||
this.startTime = startTime;
|
this.startTime = startTime;
|
||||||
this.lastUpdateTime = lastUpdateTime;
|
this.lastUpdateTime = lastUpdateTime;
|
||||||
this.stageIndex = stageIndex;
|
this.stageIndex = stageIndex;
|
||||||
|
this.stageResultIndex = stageResultIndex;
|
||||||
this.lastPvId = lastPvId;
|
this.lastPvId = lastPvId;
|
||||||
this.levelNumber = levelNumber;
|
this.levelNumber = levelNumber;
|
||||||
this.levelExp = levelExp;
|
this.levelExp = levelExp;
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
TRUNCATE TABLE `diva_game_session`;
|
||||||
|
|
||||||
|
ALTER TABLE `diva_game_session`
|
||||||
|
ADD `stage_result_index` int(11) DEFAULT NULL;
|
|
@ -0,0 +1,23 @@
|
||||||
|
DROP TABLE diva_game_session;
|
||||||
|
|
||||||
|
CREATE TABLE diva_game_session
|
||||||
|
(
|
||||||
|
id INTEGER,
|
||||||
|
accept_id INTEGER NOT NULL,
|
||||||
|
last_pv_id INTEGER,
|
||||||
|
last_update_time DATETIME,
|
||||||
|
level_exp INTEGER,
|
||||||
|
level_number INTEGER,
|
||||||
|
old_level_exp INTEGER,
|
||||||
|
old_level_number INTEGER,
|
||||||
|
stage_index INTEGER,
|
||||||
|
stage_result_index INTEGER,
|
||||||
|
start_mode VARCHAR(255),
|
||||||
|
start_time DATETIME,
|
||||||
|
vp INTEGER,
|
||||||
|
pd_id BIGINT UNIQUE
|
||||||
|
REFERENCES diva_player_profile (id) ON DELETE CASCADE,
|
||||||
|
PRIMARY KEY (
|
||||||
|
id
|
||||||
|
)
|
||||||
|
);
|
Loading…
Reference in New Issue