import { RpgServerEngine, RpgServerEngineHooks, defineModule } from '@rpgjs/server'
import { verifyJWTToken } from './auth-service'
const engine: RpgServerEngineHooks = {
onStart(server: RpgServerEngine) {
console.log('🚀 RPG Server started')
server.globalData = {
startTime: Date.now(),
events: []
}
},
onStep(server: RpgServerEngine) {
// Process global events every frame
if (server.globalData.events.length > 0) {
const event = server.globalData.events.shift()
console.log('Processing global event:', event)
}
},
async auth(server: RpgServerEngine, socket: any) {
const { token, guestMode } = socket.handshake.query
if (guestMode === 'true') {
// Allow guest connections
return `guest_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
}
if (!token) {
throw 'Authentication required'
}
try {
const user = await verifyJWTToken(token)
console.log(`User ${user.username} authenticated`)
return user.id
} catch (error) {
throw 'Invalid authentication token'
}
}
}
export default defineModule({
engine
})