From d93044d9d7d5158789e9e8e784eb97df998b8d9d Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sun, 15 Sep 2024 02:06:16 +0200 Subject: [PATCH] update characterLeave event to new event format, npm run format --- src/events/zone/characterJoin.ts | 2 +- src/events/zone/characterLeave.ts | 75 +++++++++++++++++-------------- src/events/zone/characterMove.ts | 25 +++++------ src/managers/characterManager.ts | 14 +++--- src/models/loadedZone.ts | 4 +- 5 files changed, 64 insertions(+), 56 deletions(-) diff --git a/src/events/zone/characterJoin.ts b/src/events/zone/characterJoin.ts index efc830f..50ca465 100644 --- a/src/events/zone/characterJoin.ts +++ b/src/events/zone/characterJoin.ts @@ -51,7 +51,7 @@ export default function (socket: TSocket, io: Server) { // add character to zone manager // ZoneManager.addCharacterToZone(zone.id, socket.character as Character) - CharacterManager.initCharacter(socket.character as ExtendedCharacter); + CharacterManager.initCharacter(socket.character as ExtendedCharacter) // ZoneManager.addCharacterToZone(zone.id, socket.character as Character) // send over zone and characters to socket diff --git a/src/events/zone/characterLeave.ts b/src/events/zone/characterLeave.ts index cd788ac..b6e62a4 100644 --- a/src/events/zone/characterLeave.ts +++ b/src/events/zone/characterLeave.ts @@ -4,39 +4,48 @@ import ZoneRepository from '../../repositories/zoneRepository' import ZoneManager from '../../managers/zoneManager' import { Character, Zone } from '@prisma/client' import CharacterManager from '../../managers/characterManager' +import logger from '../../utilities/logger' -/** - * Handle character zone leave event - * @param socket - * @param io - */ -export default function (socket: TSocket, io: Server) { - socket.on('zone:character:leave', async () => { - if (!socket.character) { - return +export default class ZoneLeaveEvent { + constructor( + private readonly io: Server, + private readonly socket: TSocket + ) {} + + public listen(): void { + this.socket.on('zone:character:leave', this.handleZoneLeave.bind(this)) + } + + private async handleZoneLeave(): Promise { + try { + if (!this.socket.character) { + logger.error('zone:character:leave error', 'Character not found') + return + } + + if (!this.socket.character.zoneId) { + logger.error('zone:character:leave error', 'Character not in a zone') + return + } + + const zone = await ZoneRepository.getById(this.socket.character.zoneId) + + if (!zone) { + logger.error('zone:character:leave error', 'Zone not found') + return + } + + this.socket.leave(zone.id.toString()) + + // let other clients know of character leaving + this.io.to(zone.id.toString()).emit('zone:character:leave', this.socket.character.id) + + // remove character from zone manager + await CharacterManager.removeCharacter(this.socket.character) + + logger.info('zone:character:leave', `Character ${this.socket.character.id} left zone ${zone.id}`) + } catch (error: any) { + logger.error('zone:character:leave error', error.message) } - - if (!socket.character.zoneId) { - return - } - - const zone = await ZoneRepository.getById(socket.character.zoneId) - - if (!zone) { - return - } - - socket.leave(zone.id.toString()) - - // let other clients know of new character - io.to(zone.id.toString()).emit('zone:character:leave', socket.character.id) - - // remove character to zone manager - await CharacterManager.removeCharacter(socket.character) - }) + } } - -/** - * Resources: - * https://stackoverflow.com/questions/6873607/socket-io-rooms-difference-between-broadcast-to-and-sockets-in - */ diff --git a/src/events/zone/characterMove.ts b/src/events/zone/characterMove.ts index 2e1f1a1..704dc1a 100644 --- a/src/events/zone/characterMove.ts +++ b/src/events/zone/characterMove.ts @@ -32,15 +32,15 @@ export default class CharacterMove { } private async handleCharacterMove({ positionX, positionY }: { positionX: number; positionY: number }): Promise { - let character = CharacterManager.getCharacterFromSocket(this.socket); + let character = CharacterManager.getCharacterFromSocket(this.socket) if (!character) { logger.error('character:move error', 'Character not found') return } - if(!character) { - logger.error('character:move error', 'character has not been initialized?'); - return; + if (!character) { + logger.error('character:move error', 'character has not been initialized?') + return } const path = await this.characterMoveService.calculatePath(character, positionX, positionY) @@ -49,15 +49,15 @@ export default class CharacterMove { return } - if(!character.isMoving && character.resetMovement) { - character.resetMovement = false; + if (!character.isMoving && character.resetMovement) { + character.resetMovement = false } if (character.isMoving && !character.resetMovement) { character.resetMovement = true this.nextPath[character.id] = path } - if(!character.isMoving && !character.resetMovement) { - character.isMoving = true; + if (!character.isMoving && !character.resetMovement) { + character.isMoving = true await this.moveAlongPath(character, path) } } @@ -72,7 +72,6 @@ export default class CharacterMove { // } if (character.resetMovement) { - break } @@ -110,9 +109,9 @@ export default class CharacterMove { await this.characterMoveService.applyMovementDelay() } - if(character.resetMovement) { - character.resetMovement = false; - await this.moveAlongPath(character, this.nextPath[character.id]); + if (character.resetMovement) { + character.resetMovement = false + await this.moveAlongPath(character, this.nextPath[character.id]) } else { this.finalizeMovement(character) } @@ -133,7 +132,7 @@ export default class CharacterMove { } private finalizeMovement(character: ExtendedCharacter): void { - character.isMoving = false; + character.isMoving = false this.io.in(character.zoneId.toString()).emit('character:move', character) } } diff --git a/src/managers/characterManager.ts b/src/managers/characterManager.ts index 628908c..9ed6fcc 100644 --- a/src/managers/characterManager.ts +++ b/src/managers/characterManager.ts @@ -3,10 +3,10 @@ import { Zone } from '@prisma/client' import prisma from '../utilities/prisma' class CharacterManager { - private characters!: ExtendedCharacter[]; + private characters!: ExtendedCharacter[] public async boot() { - this.characters = []; + this.characters = [] } public initCharacter(character: ExtendedCharacter) { @@ -23,20 +23,20 @@ class CharacterManager { zoneId: character.zoneId } }) - this.characters = this.characters.filter(x => x.id !== character.id); + this.characters = this.characters.filter((x) => x.id !== character.id) } public getCharacter(characterId: number) { - return this.characters.find((x) => x.id === characterId); + return this.characters.find((x) => x.id === characterId) } public getCharacterFromSocket(socket: TSocket) { - return this.characters.find((x) => x.id === socket?.character?.id); + return this.characters.find((x) => x.id === socket?.character?.id) } public getCharactersInZone(zone: Zone) { - return this.characters.filter(x => x.zoneId === zone.id); + return this.characters.filter((x) => x.zoneId === zone.id) } } -export default new CharacterManager(); \ No newline at end of file +export default new CharacterManager() diff --git a/src/models/loadedZone.ts b/src/models/loadedZone.ts index a0e8cf2..f7a9159 100644 --- a/src/models/loadedZone.ts +++ b/src/models/loadedZone.ts @@ -17,7 +17,7 @@ class LoadedZone { } public getCharacters(): ExtendedCharacter[] { - return characterManager.getCharactersInZone(this.zone); + return characterManager.getCharactersInZone(this.zone) } public async getGrid(): Promise { @@ -46,4 +46,4 @@ class LoadedZone { } } -export default LoadedZone \ No newline at end of file +export default LoadedZone