1
0
forked from noxious/server

Mass replace parameter order (socket,io)>(io,socket), worked on queueing system

This commit is contained in:
2024-09-21 23:54:52 +02:00
parent 10dc9df8a9
commit 9d6de8a1a9
36 changed files with 206 additions and 121 deletions

View File

@ -0,0 +1,26 @@
import { Server } from 'socket.io'
import { TSocket, ExtendedCharacter } from '../../utilities/types'
import CharacterRepository from '../../repositories/characterRepository'
import CharacterManager from '../../managers/characterManager'
import QueueManager from '../../managers/queueManager'
import SomeJob from '../../jobs/characterLeaveZone'
type SocketResponseT = {
character_id: number
}
export default function (io: Server, socket: TSocket) {
socket.on('character:connect', async (data: SocketResponseT) => {
console.log('character:connect requested', data)
try {
const character = await CharacterRepository.getByUserAndId(socket?.user?.id as number, data.character_id)
if (!character) return
socket.characterId = character.id
await QueueManager.addToQueue(SomeJob, { someParam: 'value' }, socket)
CharacterManager.initCharacter(character as ExtendedCharacter)
socket.emit('character:connect', character)
} catch (error: any) {
console.log('character:connect error', error)
}
})
}

View File

@ -0,0 +1,51 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository'
import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import { gameLogger } from '../../utilities/logger'
export default function (io: Server, socket: TSocket) {
socket.on('character:create', async (data: any) => {
console.log('character:create requested', data)
// zod validate
try {
data = ZCharacterCreate.parse(data)
const user_id = socket.user?.id as number
// Check if character name already exists
const characterExists = await CharacterRepository.getByName(data.name)
if (characterExists) {
return socket.emit('notification', { message: 'Character name already exists' })
}
let characters: Character[] = (await CharacterRepository.getByUserId(user_id)) as Character[]
if (characters.length >= 4) {
return socket.emit('notification', { message: 'You can only have 4 characters' })
}
const character: Character = await prisma.character.create({
data: {
name: data.name,
userId: user_id
// characterTypeId: 1 // @TODO set to chosen character type
}
})
characters = [...characters, character]
socket.emit('character:create:success')
socket.emit('character:list', characters)
gameLogger.info('character:create success')
} catch (error: any) {
console.log(error)
gameLogger.error(`character:create error: ${error.message}`)
return socket.emit('notification', { message: 'Could not create character. Please try again (later).' })
}
})
}

View File

@ -0,0 +1,30 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/types'
import { Character, Zone } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository'
type TypePayload = {
character_id: number
}
type TypeResponse = {
zone: Zone
characters: Character[]
}
export default function (io: Server, socket: TSocket) {
socket.on('character:delete', async (data: TypePayload, callback: (response: TypeResponse) => void) => {
// zod validate
try {
await CharacterRepository.deleteByUserIdAndId(socket.user?.id as number, data.character_id as number)
const user_id = socket.user?.id as number
const characters: Character[] = (await CharacterRepository.getByUserId(user_id)) as Character[]
socket.emit('character:list', characters)
} catch (error: any) {
console.log(error)
return socket.emit('notification', { message: 'Character delete failed. Please try again.' })
}
})
}

View File

@ -0,0 +1,17 @@
import { Socket, Server } from 'socket.io'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/characterRepository'
export default function CharacterList(io: Server, socket: TSocket) {
socket.on('character:list', async (data: any) => {
try {
console.log('character:list requested')
const user_id = socket.user?.id as number
const characters: Character[] = (await CharacterRepository.getByUserId(user_id)) as Character[]
socket.emit('character:list', characters)
} catch (error: any) {
console.log('character:list error', error)
}
})
}