오늘은 게임이 시작하면 호출되는 Handler 부분과
Repositories에 따른 Services를 구현했다.
향후 Prisma를 이용한 Mysql DB를 Redis 코드로 수정해야하고,
프로젝트 진행에 따른 코드 수정이 지속적으로 이뤄질 것 같다.
전체 코드로(아래 세부 설명이 존재합니다)
export const gameStart = async (userId, payload) => {
// 게임이 시작할 경우 호출되는 Handler
// console.log('------------------------------------');
// console.log('token : ', token);
// const userId = AuthUtils.verify(token);
// console.log('userId : ', userId);
// console.log('------------------------------------');
clearStage(userId);
clearGold(userId);
clearScore(userId);
clearMonsters(userId);
setStage(userId, 1);
setScore(userId, 0);
setGold(userId, 2000);
//스테이지 모두 정보 조회
const init = await gameStartService.initSendData();
// prisma의 동작 과정이 터미널에 출력 되기 때문에 로그를 함께 출력했습니다.
console.log(`@@ gameStartHandler =>>> `, init.stages);
console.log(`@@ gameStartHandler =>>> `, init.roundMonsters);
console.log(`@@ gameStartHandler =>>> `, init.monsters);
console.log(`@@ gameStartHandler =>>> `, init.towers);
// 나중에 initInfo 추가하기
init.initData = { score: getScore(userId), gold: getGold(userId) };
if (!init.stages.length) console.log('@@ gameStartHandler - 서버에 스테이지 정보가 없습니다.');
else if (!init.roundMonsters.length)
console.log('@@ gameStartHandler - 서버에 라운드 별 몬스터 정보가 없습니다.');
else if (!init.monsters.length)
console.log('@@ gameStartHandler - 서버에 몬스터 정보가 없습니다.');
else if (!init.towers.length) console.log('@@ gameStartHandler - 서버에 타워 정보가 없습니다.');
return { status: 'success', handlerId: 2, init };
};
형식으로 유저가 게임에 진입했을 경우
clearStage(userId);
clearGold(userId);
clearScore(userId);
clearMonsters(userId);
기존 게임 플레이에 따른 Stage, Gold, Score, Monster 정보를 초기화 시키고
setStage(userId, 1);
setScore(userId, 0);
setGold(userId, 2000);
Stage, Gold, Score를 게임 시작 상태에 따른 값으로 제공한다.
그 후,
const init = await gameStartService.initSendData();
게임 진입에 따른 Client에게 제공해야할 DB 모든 정보를 받아온다.
현재, GameStartService Class를 살펴 보면
export class GameStartService {
stagesRepository = new StagesRepository();
monstersRepository = new MonstersRepository();
createMonsterRepository = new CreateMonsterRepository();
towersRepository = new TowersRepository();
async initSendData() {
let stages = await this.stagesRepository.viewEntireStages();
let monsters = await this.monstersRepository.viewEntireMonsters();
let createMonsters = await this.createMonsterRepository.viewEntireCreateMonsterPerStage();
let towers = await this.towersRepository.viewEntireTowers();
console.log('-------------------------------------------------------');
console.log('테스트 스테이지 : ', stages);
console.log('테스트 몬스터 : ', monsters);
console.log('테스트 생성 몬스터 : ', createMonsters);
console.log('테스트 타워 : ', towers);
console.log('-------------------------------------------------------');
return {
stages: stages,
monsters: monsters,
roundMonsters: createMonsters,
towers: towers,
};
}
}
viewEntireMonsters = async () => {
return await prisma.monsters.findMany();
};
(Stage, Monster, CreateMonsters, towers도 동일하게 동작 중 입니다.)
아래 모든 게임 시작 시 제공해야할 정보를 찾아와
return 해주고 있다.
if (!init.stages.length) console.log('@@ gameStartHandler - 서버에 스테이지 정보가 없습니다.');
else if (!init.roundMonsters.length)
console.log('@@ gameStartHandler - 서버에 라운드 별 몬스터 정보가 없습니다.');
else if (!init.monsters.length)
console.log('@@ gameStartHandler - 서버에 몬스터 정보가 없습니다.');
else if (!init.towers.length) console.log('@@ gameStartHandler - 서버에 타워 정보가 없습니다.');
만약 찾아온 데이터가 존재하지 않으면,
서버의 log로 해당 데이터가 존재하지 않는다고 서버에 알려줍니다.
Client는 soket.on에서 'response'로
socket.on('response', (data) => {
console.log('@@ response: =>>> ', data);
if (data && data.handlerId) {
switch (data.handlerId) {
case 2:
userInfo = data.init.initData;
stages = data.init.stages;
monsters = data.init.monsters;
towers = data.init.towers;
roundMonsters = data.init.roundMonsters;
setUserInfo(userInfo.score, userInfo.gold);
setStages(stages);
setMonsters(monsters);
setTowers(towers);
setRountMonsters(roundMonsters);
break;
case 4:
displayLevelUpText(data.payload.targetStage);
break;
case 5:
console.log('Gold : ', data.currentGold);
setGold(data.currentGold);
default:
console.log('!! 일치하는 핸들러가 없습니다.');
break;
}
}
});
서버로 부터 응답을 받고, data의 handlerid에 따른
Data를 변수에 담아 사용할 부분에 제공해줍니다.
'TIL' 카테고리의 다른 글
2024년 10월 14일 TIL (15일 수정 내용 포함) (0) | 2024.10.16 |
---|---|
2024년 10월 11일 TIL (0) | 2024.10.12 |
2024년 10월 7일 TIL (0) | 2024.10.08 |
Jump And Run TIL (0) | 2024.10.07 |
2024년 10월 4일 TIL (0) | 2024.10.05 |