1
0
forked from noxious/server

use camelcase file names from now on...

This commit is contained in:
2024-08-21 20:55:58 +02:00
parent acc9eaae9e
commit 6b97e7d9cb
55 changed files with 396 additions and 116 deletions

View File

@ -1,5 +1,5 @@
import { Server } from 'socket.io'
import ZoneManager from '../managers/ZoneManager'
import ZoneManager from '../managers/zoneManager'
type CommandInput = string[]

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket, ExtendedCharacter } from '../../utilities/Types'
import CharacterRepository from '../../repositories/CharacterRepository'
import { TSocket, ExtendedCharacter } from '../../utilities/types'
import CharacterRepository from '../../repositories/characterRepository'
type SocketResponseT = {
character_id: number

View File

@ -1,9 +1,10 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
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 CharacterRepository from '../../repositories/characterRepository'
import { ZCharacterCreate } from '../../utilities/zodTypes'
import prisma from '../../utilities/prisma'
import logger from '../../utilities/logger'
export default function (socket: TSocket, io: Server) {
socket.on('character:create', async (data: any) => {
@ -30,7 +31,7 @@ export default function (socket: TSocket, io: Server) {
data: {
name: data.name,
userId: user_id,
characterTypeId: 1 // @TODO set to chosen character type
// characterTypeId: 1 // @TODO set to chosen character type
}
})
@ -38,8 +39,10 @@ export default function (socket: TSocket, io: Server) {
socket.emit('character:create:success')
socket.emit('character:list', characters)
logger.info('character:create success')
} catch (error: any) {
console.log('character:create error', error)
logger.error('character:create error', error)
return socket.emit('notification', { message: 'Could not create character. Please try again (later).' })
}
})

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import { TSocket } from '../../utilities/types'
import { Character, Zone } from '@prisma/client'
import CharacterRepository from '../../repositories/CharacterRepository'
import CharacterRepository from '../../repositories/characterRepository'
type TypePayload = {
character_id: number

View File

@ -1,7 +1,7 @@
import { Socket, Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import { TSocket } from '../../utilities/types'
import { Character } from '@prisma/client'
import CharacterRepository from '../../repositories/CharacterRepository'
import CharacterRepository from '../../repositories/characterRepository'
export default function CharacterList(socket: TSocket, io: Server) {
socket.on('character:list', async (data: any) => {

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket, ExtendedCharacter } from '../../utilities/Types'
import ZoneManager from '../../managers/ZoneManager'
import prisma from '../../utilities/Prisma'
import { AStar } from '../../utilities/Player/AStar'
import Rotation from '../../utilities/Player/Rotation'
import { TSocket, ExtendedCharacter } from '../../utilities/types'
import ZoneManager from '../../managers/zoneManager'
import prisma from '../../utilities/prisma'
import { AStar } from '../../utilities/player/aStar'
import Rotation from '../../utilities/player/rotation'
const moveTokens = new Map<number, symbol>()

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import ZoneRepository from '../../repositories/ZoneRepository'
import ZoneManager from '../../managers/ZoneManager'
import { TSocket } from '../../utilities/types'
import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client'
/**

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import ZoneRepository from '../../repositories/ZoneRepository'
import ZoneManager from '../../managers/ZoneManager'
import { TSocket } from '../../utilities/types'
import ZoneRepository from '../../repositories/zoneRepository'
import ZoneManager from '../../managers/zoneManager'
import { Character, Zone } from '@prisma/client'
interface IPayload {

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { getArgs, isCommand } from '../../../utilities/Chat'
import CharacterRepository from '../../../repositories/CharacterRepository'
import { TSocket } from '../../../utilities/types'
import { getArgs, isCommand } from '../../../utilities/chat'
import CharacterRepository from '../../../repositories/characterRepository'
type TypePayload = {
message: string

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../utilities/Types'
import CharacterRepository from '../../repositories/CharacterRepository'
import ZoneRepository from '../../repositories/ZoneRepository'
import { isCommand } from '../../utilities/Chat'
import { TSocket } from '../../utilities/types'
import CharacterRepository from '../../repositories/characterRepository'
import ZoneRepository from '../../repositories/zoneRepository'
import { isCommand } from '../../utilities/chat'
type TypePayload = {
message: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../utilities/Types'
import ZoneManager from '../managers/ZoneManager'
import { TSocket } from '../utilities/types'
import ZoneManager from '../managers/zoneManager'
export default function (socket: TSocket, io: Server) {
socket.on('disconnect', (data: any) => {

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Object } from '@prisma/client'
import ObjectRepository from '../../../repositories/ObjectRepository'
import ObjectRepository from '../../../repositories/objectRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface IPayload {
object: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { writeFile } from 'node:fs/promises'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface IObjectData {
[key: string]: Buffer

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
/**
* Handle game master new sprite event

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Sprite } from '@prisma/client'
import SpriteRepository from '../../../repositories/SpriteRepository'
import SpriteRepository from '../../../repositories/spriteRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import fs from 'fs'
import path from 'path'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
import type { Prisma, SpriteAction } from '@prisma/client'
import path from 'path'
import { writeFile, mkdir } from 'node:fs/promises'

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Tile } from '@prisma/client'
import TileRepository from '../../../repositories/TileRepository'
import TileRepository from '../../../repositories/tileRepository'
interface IPayload {}

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import path from 'path'
import fs from 'fs'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import prisma from '../../../utilities/prisma'
type Payload = {
id: string

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { writeFile } from 'node:fs/promises'
import path from 'path'
import fs from 'fs/promises'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
interface ITileData {
[key: string]: Buffer

View File

@ -1,8 +1,8 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { Zone } from '@prisma/client'
import prisma from '../../../utilities/Prisma'
import prisma from '../../../utilities/prisma'
type Payload = {
name: string

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import prisma from '../../../utilities/Prisma'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import prisma from '../../../utilities/prisma'
type Payload = {
zoneId: number

View File

@ -1,7 +1,7 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import { TSocket } from '../../../utilities/types'
import { Zone } from '@prisma/client'
import ZoneRepository from '../../../repositories/ZoneRepository'
import ZoneRepository from '../../../repositories/zoneRepository'
interface IPayload {}

View File

@ -1,6 +1,6 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { Zone } from '@prisma/client'
interface IPayload {

View File

@ -1,9 +1,9 @@
import { Server } from 'socket.io'
import { TSocket } from '../../../utilities/Types'
import ZoneRepository from '../../../repositories/ZoneRepository'
import { TSocket } from '../../../utilities/types'
import ZoneRepository from '../../../repositories/zoneRepository'
import { ZoneEventTile, ZoneObject } from '@prisma/client'
import prisma from '../../../utilities/Prisma'
import zoneManager from '../../../managers/ZoneManager'
import prisma from '../../../utilities/prisma'
import zoneManager from '../../../managers/zoneManager'
interface IPayload {
zoneId: number

View File

@ -1,5 +1,5 @@
import { Server } from 'socket.io'
import { TSocket } from '../utilities/Types'
import { TSocket } from '../utilities/types'
export default function (socket: TSocket, io: Server) {
socket.on('login', () => {

View File

@ -1,4 +1,5 @@
import { User } from '@prisma/client'
import logger from '../utilities/logger'
type TLoggedInUsers = {
users: User[]
@ -9,7 +10,7 @@ class UserManager {
// Method to initialize user manager
public async boot() {
console.log('[✅] User manager loaded')
logger.info('User manager loaded')
}
// Function that adds user to logged in users

View File

@ -1,7 +1,8 @@
import { Character, Zone } from '@prisma/client'
import ZoneRepository from '../repositories/ZoneRepository'
import ZoneService from '../services/ZoneService'
import zoneRepository from '../repositories/ZoneRepository'
import ZoneRepository from '../repositories/zoneRepository'
import ZoneService from '../services/zoneService'
import zoneRepository from '../repositories/zoneRepository'
import logger from '../utilities/logger'
type TLoadedZone = {
zone: Zone
@ -25,7 +26,7 @@ class ZoneManager {
await this.loadZone(zone)
}
console.log('[✅] Zone manager loaded')
logger.info('Zone manager loaded')
}
// Method to handle individual zone loading
@ -36,7 +37,7 @@ class ZoneManager {
characters: [],
grid
})
console.log(`[✅] Zone ID ${zone.id} loaded`)
logger.info(`Zone ID ${zone.id} loaded`)
}
// Method to handle individual zone unloading
@ -44,7 +45,7 @@ class ZoneManager {
this.loadedZones = this.loadedZones.filter((loadedZone) => {
return loadedZone.zone.id !== zoneId
})
console.log(`[❌] Zone ID ${zoneId} unloaded`)
logger.info(`Zone ID ${zoneId} unloaded`)
}
// Getter for loaded zones

View File

@ -1,8 +1,8 @@
// socket io jwt auth middleware
import { verify } from 'jsonwebtoken'
import { TSocket } from '../utilities/Types'
import config from '../utilities/Config'
import UserRepository from '../repositories/UserRepository'
import { TSocket } from '../utilities/types'
import config from '../utilities/config'
import UserRepository from '../repositories/userRepository'
import { User } from '@prisma/client'
export async function Authentication(socket: TSocket, next: any) {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Character } from '@prisma/client'
class CharacterRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Object } from '@prisma/client'
class ObjectRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Sprite, SpriteAction } from '@prisma/client'
class SpriteRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { Tile } from '@prisma/client'
class TileRepository {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
import { User } from '@prisma/client'
class UserRepository {

View File

@ -1,5 +1,5 @@
import { Zone } from '@prisma/client'
import prisma from '../utilities/Prisma' // Import the global Prisma instance
import prisma from '../utilities/prisma' // Import the global Prisma instance
class ZoneRepository {
async getFirst(): Promise<Zone | null> {

View File

@ -1,22 +1,24 @@
import fs from 'fs'
import path from 'path'
import express, { Application } from 'express'
import { createServer as httpServer } from 'http'
import { addHttpRoutes } from './utilities/Http'
import { createServer as httpServer, Server as HTTPServer } from 'http'
import { addHttpRoutes } from './utilities/http'
import cors from 'cors'
import { Server as SocketServer } from 'socket.io'
import { TSocket } from './utilities/Types'
import config from './utilities/Config'
import prisma from './utilities/Prisma'
import ZoneManager from './managers/ZoneManager'
import UserManager from './managers/UserManager'
import { Authentication } from './middleware/Authentication'
import CommandManager from './managers/CommandManager'
import { TSocket } from './utilities/types'
import config from './utilities/config'
import prisma from './utilities/prisma'
import ZoneManager from './managers/zoneManager'
import UserManager from './managers/userManager'
import { Authentication } from './middleware/authentication'
// import CommandManager from './managers/CommandManager'
import { Dirent } from 'node:fs'
import logger from './utilities/logger'
export class Server {
private readonly app: Application
private readonly http: any
private readonly http: HTTPServer
private readonly io: SocketServer
/**
@ -39,17 +41,17 @@ export class Server {
// Check prisma connection
try {
await prisma.$connect()
console.log('[✅] Database connected')
logger.info('Database connected')
} catch (error: any) {
throw new Error(`[❌] Database connection failed: ${error.message}`)
logger.error(`Database connection failed: ${error.message}`)
}
// Start the server
try {
await this.http.listen(config.PORT, config.HOST)
console.log('[✅] Socket.IO running on port', config.PORT)
logger.info(`Socket.IO running on port ${config.PORT}`)
} catch (error: any) {
throw new Error(`[❌] Socket.IO failed to start: ${error.message}`)
logger.error(`Socket.IO failed to start: ${error.message}`)
}
// Add http API routes
@ -78,7 +80,7 @@ export class Server {
try {
await this.loadEventHandlers(eventsPath, socket)
} catch (error: any) {
throw new Error('[❌] Failed to load event handlers: ' + error.message)
logger.error(`Failed to load event handlers: ${error.message}`)
}
}
@ -101,3 +103,5 @@ export class Server {
// Start the server
const server = new Server()
server.start()
console.log('Server started')

View File

@ -1,6 +1,6 @@
import bcrypt from 'bcryptjs'
import UserRepository from '../repositories/UserRepository'
import prisma from '../utilities/Prisma'
import UserRepository from '../repositories/userRepository'
import prisma from '../utilities/prisma'
import { User } from '@prisma/client'
class UserService {

View File

@ -1,4 +1,4 @@
import prisma from '../utilities/Prisma'
import prisma from '../utilities/prisma'
class ZoneService {
async createDemoZone(): Promise<boolean> {

View File

@ -1,14 +1,15 @@
import { Application, Request, Response } from 'express'
import UserService from '../services/UserService'
import UserService from '../services/userService'
import jwt from 'jsonwebtoken'
import config from './Config'
import { loginAccountSchema, registerAccountSchema } from './ZodTypes'
import config from './config'
import { loginAccountSchema, registerAccountSchema } from './zodTypes'
import path from 'path'
import { TAsset } from './Types'
import tileRepository from '../repositories/TileRepository'
import objectRepository from '../repositories/ObjectRepository'
import spriteRepository from '../repositories/SpriteRepository'
import { TAsset } from './types'
import tileRepository from '../repositories/tileRepository'
import objectRepository from '../repositories/objectRepository'
import spriteRepository from '../repositories/spriteRepository'
import fs from 'fs'
import logger from './logger'
async function addHttpRoutes(app: Application) {
app.get('/assets', async (req: Request, res: Response) => {
@ -60,8 +61,6 @@ async function addHttpRoutes(app: Application) {
assetPath = path.join(process.cwd(), 'public', assetType, fileName)
}
console.log(`Attempting to serve: ${assetPath}`)
if (!fs.existsSync(assetPath)) {
console.error(`File not found: ${assetPath}`)
return res.status(404).send('Asset not found')
@ -114,7 +113,7 @@ async function addHttpRoutes(app: Application) {
return res.status(400).json({ message: 'Failed to register user' })
})
console.log('[✅] Web routes added')
logger.info('Web routes added')
}
export { addHttpRoutes }

20
src/utilities/logger.ts Normal file
View File

@ -0,0 +1,20 @@
import pino from 'pino'
const logger = pino({
level: process.env.LOG_LEVEL || 'debug',
transport: {
target: 'pino/file',
options: {
destination: './logs/app.log',
mkdir: true
}
},
formatters: {
level: (label) => {
return { level: label.toUpperCase() }
},
},
timestamp: pino.stdTimeFunctions.isoTime
})
export default logger