39 lines
1.4 KiB
TypeScript
39 lines
1.4 KiB
TypeScript
import { Server } from 'socket.io'
|
|
|
|
import type { TSocket } from '#application/types'
|
|
|
|
import Logger, { LoggerType } from '#application/logger'
|
|
import { Character } from '#entities/character'
|
|
import CharacterRepository from '#repositories/characterRepository'
|
|
|
|
export abstract class BaseEvent {
|
|
protected readonly logger = Logger.type(LoggerType.GAME)
|
|
|
|
constructor(
|
|
readonly io: Server,
|
|
readonly socket: TSocket
|
|
) {}
|
|
|
|
protected async getCharacter(): Promise<Character | null> {
|
|
const characterRepository = new CharacterRepository()
|
|
return characterRepository.getById(this.socket.characterId!)
|
|
}
|
|
|
|
protected async isCharacterGM(): Promise<boolean> {
|
|
const character = await this.getCharacter()
|
|
return character?.getRole() === 'gm'
|
|
}
|
|
|
|
protected emitError(message: string): void {
|
|
this.socket.emit('notification', { title: 'Server message', message })
|
|
this.logger.error('Base event error', `Player ${this.socket.userId}: ${message}`)
|
|
}
|
|
|
|
protected handleError(context: string, error: unknown): void {
|
|
console.log(error)
|
|
const errorMessage = error instanceof Error ? error.message : error && typeof error === 'object' && 'toString' in error ? error.toString() : String(error)
|
|
this.socket.emit('notification', { title: 'Server message', message: `Server error occured. Please contact the server administrator.` })
|
|
this.logger.error('Base event error', errorMessage)
|
|
}
|
|
}
|