몬스터를 죽이면 점수를 얻고 (이건 구현했음)
그 점수가 일정 이상이 되면 스테이지가 넘어가게 하고 싶다.
일단 클라의 score를 서버단으로 보내고 싶은데 방법을 모르겠다
-> game.js에서 let score = 0;
으로 하드코딩 했다. 이러니까 페이로드에 몬스터당 처치 점수, 처치당 골드, 누적스코어까지 잘 담겨서 보내졌다.
너무 생각만 하지 말고 일단 좀 만들어라
이 타워 어디있는지 정보가 x, y로 존재하니 보내주고, 이 타워의 레벨이 필요할테고, 그런 상식 선에서 필요한 것들을 페이로드에 담아 보내주면 된다. 핸들러 맵핑은 그걸 위해 하는 것이고.
bindTower 라는 메서드가 tower.handler.js
에 있다고 하자. 그리고 game.js의 타워 구매로직 중간쯤에서 sendEvent(99, {x, y})
로 타워의 정보를 보낸다고 하자. 그러면 handlerMapping.js에는 99:bindTower
가 들어가 있어야 할 것이다.
bindTower는 일단 공룡점프 참고하면 userId와 payload를 인자로 받으니 똑같이 받아보자. 그리고 그냥 console.log로 payload를 한번 찍어보자.
-> 이러면 클라단에서 서버에게 payload로 뭘 보내는지 알 수 있다.
이걸 봐가며 검증을 포함한 비즈니스 로직을 짜 주고, 성공하면 return { status: 'success', handler: 99 }
로 리턴해주자. 이러면 sendEvent(99, {x, y})
에서 출발해 핸들러 맵핑을 거쳐 핸들러를 실행한 bindTower라는 핸들러의 사이클은 끝이다.
on emit
io랑 socket
웹소켓은 그게 전부다.
-> 이거 Score.js를 따로 두고 거기서 this.score로 불러오려고 하니 안 된 것이다. (this.score = 0으로 정의는 되어 있었다)
game.js에 하드코딩 했더니 해결돼서 일단 그렇게 두었다.
안돼 저장도 커밋도 안했단 말이야 ㅇ래ㅑㅇ너ㅑㅐㅓㅐㅑㄱ허개ㅑ핵ㄷㅎ