1
0
forked from noxious/server

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 fs from 'fs'
import sharp from 'sharp' import sharp from 'sharp'
import { BaseCommand } from '#application/base/baseCommand' 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 Database from '#application/database'
import { TSocket } from '#application/types'
import { CharacterHair } from '#entities/characterHair' import { CharacterHair } from '#entities/characterHair'
import characterHairRepository from '#repositories/characterHairRepository' import characterHairRepository from '#repositories/characterHairRepository'
interface IPayload {} interface IPayload {}
export default class characterHairListEvent { export default class characterHairListEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('character:hair:list', this.handleEvent.bind(this)) this.socket.on('character:hair:list', this.handleEvent.bind(this))
} }

View File

@ -1,8 +1,4 @@
import { 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 ZoneManager from '#managers/zoneManager' import ZoneManager from '#managers/zoneManager'
import CharacterHairRepository from '#repositories/characterHairRepository' import CharacterHairRepository from '#repositories/characterHairRepository'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
@ -12,12 +8,7 @@ interface CharacterConnectPayload {
characterHairId?: number characterHairId?: number
} }
export default class CharacterConnectEvent { export default class CharacterConnectEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('character:connect', this.handleCharacterConnect.bind(this)) this.socket.on('character:connect', this.handleCharacterConnect.bind(this))
} }
@ -62,12 +53,12 @@ export default class CharacterConnectEvent {
private emitError(message: string): void { private emitError(message: string): void {
this.socket.emit('notification', { title: 'Server message', message }) 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 { private handleError(context: string, error: unknown): void {
const errorMessage = error instanceof Error ? error.message : String(error) const errorMessage = error instanceof Error ? error.message : String(error)
this.emitError(`${context}: ${errorMessage}`) 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 { BaseEvent } from '#application/base/baseEvent'
import { TSocket } from '#application/types'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import { Zone } from '#entities/zone' import { Zone } from '#entities/zone'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
import { CharacterService } from '#services/characterService'
type TypePayload = { type TypePayload = {
characterId: number characterId: number
@ -15,12 +12,7 @@ type TypeResponse = {
characters: Character[] characters: Character[]
} }
export default class CharacterDeleteEvent { export default class CharacterDeleteEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('character:delete', this.handleCharacterDelete.bind(this)) 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 Database from '#application/database'
import { gameLogger } from '#application/logger'
import { TSocket } from '#application/types'
import { Character } from '#entities/character' import { Character } from '#entities/character'
import CharacterRepository from '#repositories/characterRepository' import CharacterRepository from '#repositories/characterRepository'
export default class CharacterListEvent { export default class CharacterListEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('character:list', this.handleEvent.bind(this)) this.socket.on('character:list', this.handleEvent.bind(this))
} }
@ -23,7 +15,7 @@ export default class CharacterListEvent {
this.socket.emit('character:list', characters) this.socket.emit('character:list', characters)
} catch (error: any) { } 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 { BaseEvent } from '#application/base/baseEvent'
import { CharacterHair } from '#entities/characterHair'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
export default class CharacterHairCreateEvent { export default class CharacterHairCreateEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:characterHair:create', this.handleEvent.bind(this)) this.socket.on('gm:characterHair:create', this.handleEvent.bind(this))
} }
@ -23,11 +16,8 @@ export default class CharacterHairCreateEvent {
return callback(false) return callback(false)
} }
const newCharacterHair = await prisma.characterHair.create({ const newCharacterHair = new CharacterHair()
data: { await newCharacterHair.setName('New hair').save()
name: 'New hair'
}
})
callback(true, newCharacterHair) callback(true, newCharacterHair)
} catch (error) { } catch (error) {

View File

@ -1,20 +1,12 @@
import { Server } from 'socket.io' import { BaseEvent } from '#application/base/baseEvent'
import CharacterHairRepository from '#repositories/characterHairRepository'
import { gameMasterLogger } from '#application/logger'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
interface IPayload { interface IPayload {
id: number id: number
} }
export default class characterHairDeleteEvent { export default class characterHairDeleteEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:characterHair:remove', this.handleEvent.bind(this)) this.socket.on('gm:characterHair:remove', this.handleEvent.bind(this))
} }
@ -28,13 +20,14 @@ export default class characterHairDeleteEvent {
} }
try { try {
await prisma.characterHair.delete({ const characterHair = await CharacterHairRepository.getById(data.id)
where: { id: data.id } if (characterHair) {
}) await characterHair.delete()
}
callback(true) callback(true)
} catch (error) { } 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) callback(false)
} }
} }

View File

@ -1,19 +1,11 @@
import { CharacterHair } from '@prisma/client' import { BaseEvent } from '#application/base/baseEvent'
import { Server } from 'socket.io' import { CharacterHair } from '#entities/characterHair'
import { gameMasterLogger } from '#application/logger'
import { TSocket } from '#application/types'
import characterHairRepository from '#repositories/characterHairRepository' import characterHairRepository from '#repositories/characterHairRepository'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
interface IPayload {} interface IPayload {}
export default class characterHairListEvent { export default class characterHairListEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:characterHair:list', this.handleEvent.bind(this)) 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> { private async handleEvent(data: IPayload, callback: (response: CharacterHair[]) => void): Promise<void> {
const character = await characterRepository.getById(this.socket.characterId as number) const character = await characterRepository.getById(this.socket.characterId as number)
if (!character) { if (!character) {
gameMasterLogger.error('gm:characterHair:list error', 'Character not found') this.logger.error('gm:characterHair:list error', 'Character not found')
return callback([]) return callback([])
} }
if (character.role !== 'gm') { 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([]) return callback([])
} }

View File

@ -1,25 +1,19 @@
import { CharacterGender, CharacterRace } from '@prisma/client' import { BaseEvent } from '#application/base/baseEvent'
import { Server } from 'socket.io' import { CharacterGender } from '#application/enums'
import { UUID } from '#application/types'
import { gameMasterLogger } from '#application/logger' import CharacterHairRepository from '#repositories/characterHairRepository'
import prisma from '#application/prisma'
import { TSocket } from '#application/types'
import characterRepository from '#repositories/characterRepository' import characterRepository from '#repositories/characterRepository'
import SpriteRepository from '#repositories/spriteRepository'
type Payload = { type Payload = {
id: number id: number
name: string name: string
gender: CharacterGender gender: CharacterGender
isSelectable: boolean isSelectable: boolean
spriteId: string spriteId: UUID
} }
export default class CharacterHairUpdateEvent { export default class CharacterHairUpdateEvent extends BaseEvent {
constructor(
private readonly io: Server,
private readonly socket: TSocket
) {}
public listen(): void { public listen(): void {
this.socket.on('gm:characterHair:update', this.handleObjectUpdate.bind(this)) this.socket.on('gm:characterHair:update', this.handleObjectUpdate.bind(this))
} }
@ -33,19 +27,16 @@ export default class CharacterHairUpdateEvent {
} }
try { try {
await prisma.characterHair.update({ const sprite = await SpriteRepository.getById(data.spriteId)
where: { id: data.id }, const characterHair = await CharacterHairRepository.getById(data.id)
data: {
name: data.name, if (characterHair) {
gender: data.gender, await characterHair.setName(data.name).setGender(data.gender).setIsSelectable(data.isSelectable).setSprite(sprite!).update()
isSelectable: data.isSelectable,
spriteId: data.spriteId
} }
})
return callback(true) return callback(true)
} catch (error) { } 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) return callback(false)
} }
} }