핸들러 이벤트 (Handler Event)
핸들러 이벤트 시스템은 특정 이벤트가 발생할 때 미리 정의된 함수(핸들러)를 호출하여 해당 이벤트를 처리하는 방식이다. 이 시스템에서는 이벤트와 핸들러 함수 간의 매핑을 관리한다.
코드 설명
- 핸들러 매핑:
const handlerMappings = {
21: monsterKillHandler,
2: towerClearHandler,
3: towerAddOnHandler,
4: upgradeTower,
5: towerRemoveHandler,
6: goldChangeHandler,
7: InitGoldHandler,
11: gameStart,
12: gameEnd,
};
여기서 handlerMappings 객체는 이벤트 코드와 해당 핸들러 함수를 매핑한다. 예를 들어, 이벤트 코드 2가 발생하면 towerClearHandler 함수가 호출된다.
- 2. 타워 핸들러:
- towerAddOnHandler: 클라이언트에서 타워를 추가하려는 요청을 처리한다. 클라이언트의 타워 정보와 서버의 타워 정보를 비교하여 차이가 없으면 새로운 타워를 추가한다.
- towerClearHandler: 서버에 저장된 모든 타워를 삭제한다.
- towerRemoveHandler: 특정 좌표의 타워를 삭제한다.
- upgradeTower: 타워를 업그레이드하는 기능을 담당할 예정인 함수다.
- 3. 타워 모델:
- addTower: 새로운 타워를 추가한다.
- getTowers: 특정 유저의 모든 타워를 반환한다.
- removeTower: 특정 좌표의 타워를 삭제한다.
- clearTower: 모든 타워를 삭제한다.
- 4. 비교 함수:
function compareTowers(currentTowers, gameTowers) {
if (currentTowers.length !== gameTowers.length) {
return true;
}
for (let i = 0; i < currentTowers.length; i++) {
const currentTower = currentTowers[i];
const gameTowerPosition = gameTowers[i];
if (
currentTower.tower.X !== gameTowerPosition.x ||
currentTower.tower.Y !== gameTowerPosition.y
) {
return true;
}
}
return false;
}
클라이언트와 서버의 타워 정보를 비교하여 차이가 있는지 확인합니다. 차이가 있으면 true를 반환합니다.
5. 타워 배치 함수:
function placeInitialTowers() {
sendEvent(2); // 게임이 시작될 때 타워를 비우기
for (let i = 0; i < numOfInitialTowers; i++) {
const { x, y } = getRandomPositionNearPath(200);
sendEvent(3, { X: x, Y: y, gameTowers: towers });
const tower = new Tower(x, y, towerCost);
towers.push(tower);
tower.draw(ctx, towerImage);
}
}
게임 시작 시 초기 타워들을 배치하는 함수다. 타워를 배치하기 전에 서버와 타워 정보를 검증한다.
웹소켓과 핸들러 이벤트의 장점
- 실시간 통신: 웹소켓을 이용하면 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있어 게임과 같은 실시간 애플리케이션에 적합하다.
- 효율적인 자원 사용: 지속적인 연결을 유지하여 HTTP 요청-응답의 오버헤드를 줄일 수 있다.
- 확장성: 이벤트 핸들러 매핑을 통해 쉽게 기능을 확장하거나 수정할 수 있다.
'[웹 소켓]' 카테고리의 다른 글
handler모듈화 (0) | 2024.07.12 |
---|