Updated more socket events

This commit is contained in:
Dennis Postma 2024-12-28 20:51:11 +01:00
parent 3da21a7856
commit 5b386ae455
9 changed files with 44 additions and 109 deletions

View File

@ -1,4 +1,5 @@
import fs from 'fs'
import sharp from 'sharp'
import { BaseCommand } from '#application/base/baseCommand'

View File

@ -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))
}

View File

@ -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)
}
}

View File

@ -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))
}

View File

@ -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)
}
}
}

View File

@ -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) {

View File

@ -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)
}
}

View File

@ -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<void> {
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([])
}

View File

@ -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)
}
}