forked from noxious/server
Updated more socket events
This commit is contained in:
parent
3da21a7856
commit
5b386ae455
@ -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'
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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([])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user