From 5b386ae45559d1c0c2952f17148b3f16b0587562 Mon Sep 17 00:00:00 2001 From: Dennis Postma Date: Sat, 28 Dec 2024 20:51:11 +0100 Subject: [PATCH] Updated more socket events --- src/commands/tiles.ts | 1 + .../charactersScreen/characterHairList.ts | 11 +----- src/socketEvents/character/connect.ts | 17 ++------- src/socketEvents/character/delete.ts | 12 +----- src/socketEvents/character/list.ts | 14 ++----- .../assetManager/characterHair/create.ts | 20 +++------- .../assetManager/characterHair/delete.ts | 23 ++++-------- .../assetManager/characterHair/list.ts | 18 +++------ .../assetManager/characterHair/update.ts | 37 +++++++------------ 9 files changed, 44 insertions(+), 109 deletions(-) diff --git a/src/commands/tiles.ts b/src/commands/tiles.ts index b618d43..08a3667 100644 --- a/src/commands/tiles.ts +++ b/src/commands/tiles.ts @@ -1,4 +1,5 @@ import fs from 'fs' + import sharp from 'sharp' import { BaseCommand } from '#application/base/baseCommand' diff --git a/src/socketEvents/character/charactersScreen/characterHairList.ts b/src/socketEvents/character/charactersScreen/characterHairList.ts index 2aa2709..47e7e49 100644 --- a/src/socketEvents/character/charactersScreen/characterHairList.ts +++ b/src/socketEvents/character/charactersScreen/characterHairList.ts @@ -1,18 +1,11 @@ -import { Server } from 'socket.io' - +import { BaseEvent } from '#application/base/baseEvent' import Database from '#application/database' -import { TSocket } from '#application/types' import { CharacterHair } from '#entities/characterHair' import characterHairRepository from '#repositories/characterHairRepository' interface IPayload {} -export default class characterHairListEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class characterHairListEvent extends BaseEvent { public listen(): void { this.socket.on('character:hair:list', this.handleEvent.bind(this)) } diff --git a/src/socketEvents/character/connect.ts b/src/socketEvents/character/connect.ts index c75499d..3fe0250 100644 --- a/src/socketEvents/character/connect.ts +++ b/src/socketEvents/character/connect.ts @@ -1,8 +1,4 @@ -import { Server } from 'socket.io' - -import Database from '#application/database' -import { gameLogger } from '#application/logger' -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' import ZoneManager from '#managers/zoneManager' import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterRepository from '#repositories/characterRepository' @@ -12,12 +8,7 @@ interface CharacterConnectPayload { characterHairId?: number } -export default class CharacterConnectEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class CharacterConnectEvent extends BaseEvent { public listen(): void { this.socket.on('character:connect', this.handleCharacterConnect.bind(this)) } @@ -62,12 +53,12 @@ export default class CharacterConnectEvent { private emitError(message: string): void { this.socket.emit('notification', { title: 'Server message', message }) - gameLogger.error('character:connect error', `Player ${this.socket.userId}: ${message}`) + this.logger.error('character:connect error', `Player ${this.socket.userId}: ${message}`) } private handleError(context: string, error: unknown): void { const errorMessage = error instanceof Error ? error.message : String(error) this.emitError(`${context}: ${errorMessage}`) - gameLogger.error('character:connect error', errorMessage) + this.logger.error('character:connect error', errorMessage) } } diff --git a/src/socketEvents/character/delete.ts b/src/socketEvents/character/delete.ts index f6723ac..849e13e 100644 --- a/src/socketEvents/character/delete.ts +++ b/src/socketEvents/character/delete.ts @@ -1,10 +1,7 @@ -import { Server } from 'socket.io' - -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' import { Character } from '#entities/character' import { Zone } from '#entities/zone' import CharacterRepository from '#repositories/characterRepository' -import { CharacterService } from '#services/characterService' type TypePayload = { characterId: number @@ -15,12 +12,7 @@ type TypeResponse = { characters: Character[] } -export default class CharacterDeleteEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class CharacterDeleteEvent extends BaseEvent { public listen(): void { this.socket.on('character:delete', this.handleCharacterDelete.bind(this)) } diff --git a/src/socketEvents/character/list.ts b/src/socketEvents/character/list.ts index c74247c..d7836be 100644 --- a/src/socketEvents/character/list.ts +++ b/src/socketEvents/character/list.ts @@ -1,17 +1,9 @@ -import { Socket, Server } from 'socket.io' - +import { BaseEvent } from '#application/base/baseEvent' import Database from '#application/database' -import { gameLogger } from '#application/logger' -import { TSocket } from '#application/types' import { Character } from '#entities/character' import CharacterRepository from '#repositories/characterRepository' -export default class CharacterListEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class CharacterListEvent extends BaseEvent { public listen(): void { this.socket.on('character:list', this.handleEvent.bind(this)) } @@ -23,7 +15,7 @@ export default class CharacterListEvent { this.socket.emit('character:list', characters) } catch (error: any) { - gameLogger.error('character:list error', error.message) + this.logger.error('character:list error', error.message) } } } diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/create.ts b/src/socketEvents/gameMaster/assetManager/characterHair/create.ts index 3bfe169..d321fc9 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/create.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/create.ts @@ -1,15 +1,8 @@ -import { Server } from 'socket.io' - -import prisma from '#application/prisma' -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' +import { CharacterHair } from '#entities/characterHair' import characterRepository from '#repositories/characterRepository' -export default class CharacterHairCreateEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class CharacterHairCreateEvent extends BaseEvent { public listen(): void { this.socket.on('gm:characterHair:create', this.handleEvent.bind(this)) } @@ -23,11 +16,8 @@ export default class CharacterHairCreateEvent { return callback(false) } - const newCharacterHair = await prisma.characterHair.create({ - data: { - name: 'New hair' - } - }) + const newCharacterHair = new CharacterHair() + await newCharacterHair.setName('New hair').save() callback(true, newCharacterHair) } catch (error) { diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts b/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts index 708f183..0f80778 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/delete.ts @@ -1,20 +1,12 @@ -import { Server } from 'socket.io' - -import { gameMasterLogger } from '#application/logger' -import prisma from '#application/prisma' -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' +import CharacterHairRepository from '#repositories/characterHairRepository' import characterRepository from '#repositories/characterRepository' interface IPayload { id: number } -export default class characterHairDeleteEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class characterHairDeleteEvent extends BaseEvent { public listen(): void { this.socket.on('gm:characterHair:remove', this.handleEvent.bind(this)) } @@ -28,13 +20,14 @@ export default class characterHairDeleteEvent { } try { - await prisma.characterHair.delete({ - where: { id: data.id } - }) + const characterHair = await CharacterHairRepository.getById(data.id) + if (characterHair) { + await characterHair.delete() + } callback(true) } catch (error) { - gameMasterLogger.error(`Error deleting character type ${data.id}: ${error instanceof Error ? error.message : String(error)}`) + this.logger.error(`Error deleting character type ${data.id}: ${error instanceof Error ? error.message : String(error)}`) callback(false) } } diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/list.ts b/src/socketEvents/gameMaster/assetManager/characterHair/list.ts index 3a3e236..d6ea78d 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/list.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/list.ts @@ -1,19 +1,11 @@ -import { CharacterHair } from '@prisma/client' -import { Server } from 'socket.io' - -import { gameMasterLogger } from '#application/logger' -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' +import { CharacterHair } from '#entities/characterHair' import characterHairRepository from '#repositories/characterHairRepository' import characterRepository from '#repositories/characterRepository' interface IPayload {} -export default class characterHairListEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class characterHairListEvent extends BaseEvent { public listen(): void { this.socket.on('gm:characterHair:list', this.handleEvent.bind(this)) } @@ -21,12 +13,12 @@ export default class characterHairListEvent { private async handleEvent(data: IPayload, callback: (response: CharacterHair[]) => void): Promise { const character = await characterRepository.getById(this.socket.characterId as number) if (!character) { - gameMasterLogger.error('gm:characterHair:list error', 'Character not found') + this.logger.error('gm:characterHair:list error', 'Character not found') return callback([]) } if (character.role !== 'gm') { - gameMasterLogger.info(`User ${character.id} tried to list character hair but is not a game master.`) + this.logger.info(`User ${character.id} tried to list character hair but is not a game master.`) return callback([]) } diff --git a/src/socketEvents/gameMaster/assetManager/characterHair/update.ts b/src/socketEvents/gameMaster/assetManager/characterHair/update.ts index 526d389..7af2a63 100644 --- a/src/socketEvents/gameMaster/assetManager/characterHair/update.ts +++ b/src/socketEvents/gameMaster/assetManager/characterHair/update.ts @@ -1,25 +1,19 @@ -import { CharacterGender, CharacterRace } from '@prisma/client' -import { Server } from 'socket.io' - -import { gameMasterLogger } from '#application/logger' -import prisma from '#application/prisma' -import { TSocket } from '#application/types' +import { BaseEvent } from '#application/base/baseEvent' +import { CharacterGender } from '#application/enums' +import { UUID } from '#application/types' +import CharacterHairRepository from '#repositories/characterHairRepository' import characterRepository from '#repositories/characterRepository' +import SpriteRepository from '#repositories/spriteRepository' type Payload = { id: number name: string gender: CharacterGender isSelectable: boolean - spriteId: string + spriteId: UUID } -export default class CharacterHairUpdateEvent { - constructor( - private readonly io: Server, - private readonly socket: TSocket - ) {} - +export default class CharacterHairUpdateEvent extends BaseEvent { public listen(): void { this.socket.on('gm:characterHair:update', this.handleObjectUpdate.bind(this)) } @@ -33,19 +27,16 @@ export default class CharacterHairUpdateEvent { } try { - await prisma.characterHair.update({ - where: { id: data.id }, - data: { - name: data.name, - gender: data.gender, - isSelectable: data.isSelectable, - spriteId: data.spriteId - } - }) + const sprite = await SpriteRepository.getById(data.spriteId) + const characterHair = await CharacterHairRepository.getById(data.id) + + if (characterHair) { + await characterHair.setName(data.name).setGender(data.gender).setIsSelectable(data.isSelectable).setSprite(sprite!).update() + } return callback(true) } catch (error) { - gameMasterLogger.error(`Error updating character hair: ${error instanceof Error ? error.message : String(error)}`) + this.logger.error(`Error updating character hair: ${error instanceof Error ? error.message : String(error)}`) return callback(false) } }