오늘은 아이템을 먹었을 경우
시간 + 아이템 바탕으로 서버가 검증하는 코드를 구현했다.
const moveStageHandler = (userId, payload) => {
const { stages } = getGameAssets();
const { currentStage, targetStage } = payload;
// 유저의 현재 스테이지 정보를 가져온다.
let currentStages = getStage(userId);
if (!currentStages.length) {
return { status: 'fail', message: 'No Stages Found For User' };
}
// 오름차순 -> 유저의 진행한 가장 큰 스테이지 ID를 확인
currentStages.sort((a, b) => a.id - b.id);
const playerStage = currentStages[currentStages.length - 1];
// 서버가 아는 현재 유저 스테이지 가져오기
// 서버(currentStage) VS 클라이언트(payload.currendStage) 비교
if (playerStage.id !== currentStage.id)
return { status: 'fail', message: 'Current Stage Mismatch' };
const serverTime = Date.now(); // 현재 타임스탬프
let elapsedTime = ((serverTime - playerStage.timestamp) / 1000) * playerStage.scorePerSecond;
// ((현재 시간 - 스테이지 시작 시간) / 1000) * 시간 당 점수
// 로 유저가 시간 당 얻은 점수 구하기
const playerEatedItem = getUserItem(userId, currentStage.id);
console.log('플레이어 아이템 : ', playerEatedItem);
elapsedTime += playerEatedItem.reduce((acc, cur) => {
return (acc += cur);
}, 0);
// 유저가 먹은 점수 더해주기
// 마지막에 먹은 점수로 유효 범위 정하기
if (elapsedTime > 105 + playerEatedItem[playerEatedItem.length - 1]) {
return { status: 'fail', message: 'Invalid elapsed time' };
}
// 오차 범위
if (!stages.data.some((stage) => stage.id === targetStage.id))
return { status: 'fail', message: 'Target Stage Not Found' };
// 스테이지 유무 확인
setStage(userId, targetStage, serverTime);
return { status: 'success' };
};
let elapsedTime = ((serverTime - playerStage.timestamp) / 1000) * playerStage.scorePerSecond
const playerEatedItem = getUserItem(userI, currentStage.id)
elapsedTime += playerEatedItem.reduce((acc, cur)=>{
return (acc += cur)
}, 0)
로 서버가 클라이언트가 진행한 시간과 점수를 바탕으로 검증을하고
elapsedTime > 105 + playerEatedItem[playerEatedItem.length - 1]
일 경우 시간 유효 범위를 초과한 시간으로 판정하고,
stages.data.some((stage)=> stage.id === targetStage.id
일 경우 현재 스테이지에서 넘어갈 스테이지가 아닌
오류 상황이라고 알려줍니다.
그 후, setStage(userId, targetStage, serverTime)로
클라이언트의 유자가 다음 스테이지로 넘어간다는 것을
서버에 알려줍니다.
'TIL' 카테고리의 다른 글
2024년 10월 7일 TIL (0) | 2024.10.08 |
---|---|
Jump And Run TIL (0) | 2024.10.07 |
2024년 10월 1일 TIL (0) | 2024.10.04 |
2024년 9월 30 TIL (0) | 2024.10.01 |
2024년 9월 27일 TIL (0) | 2024.09.27 |