From 50ccf28a0482c23f8675b81cb39fe985324d77fc Mon Sep 17 00:00:00 2001 From: jwinterm Date: Mon, 26 May 2025 20:04:25 -0400 Subject: [PATCH] refactor backend folder structure --- README.md | 62 +++++++++++++------- src/{backend => db}/dbcalls.js | 0 src/{backend => db}/user.js | 2 +- src/{backend => debug}/debugManager.js | 2 +- src/{backend => game}/dungeon.js | 0 src/{backend => game}/game.js | 0 src/{backend => game}/lightingAndFov.js | 0 src/{backend => game}/monster.js | 0 src/{backend => game}/player.js | 0 src/{backend => game}/rot.js | 0 src/{backend => game}/rot.min.js | 0 src/{backend => }/index.js | 12 ++-- src/{backend => network}/broadcastManager.js | 0 src/{backend => network}/socketHandlers.js | 4 +- src/{backend => }/package.json | 0 src/{backend => rpc}/rpccalls.js | 0 16 files changed, 51 insertions(+), 31 deletions(-) rename src/{backend => db}/dbcalls.js (100%) rename src/{backend => db}/user.js (97%) rename src/{backend => debug}/debugManager.js (99%) rename src/{backend => game}/dungeon.js (100%) rename src/{backend => game}/game.js (100%) rename src/{backend => game}/lightingAndFov.js (100%) rename src/{backend => game}/monster.js (100%) rename src/{backend => game}/player.js (100%) rename src/{backend => game}/rot.js (100%) rename src/{backend => game}/rot.min.js (100%) rename src/{backend => }/index.js (86%) rename src/{backend => network}/broadcastManager.js (100%) rename src/{backend => network}/socketHandlers.js (99%) rename src/{backend => }/package.json (100%) rename src/{backend => rpc}/rpccalls.js (100%) diff --git a/README.md b/README.md index c77e335..dc80cb1 100644 --- a/README.md +++ b/README.md @@ -52,23 +52,35 @@ The game implements a sophisticated real-time communication system using Socket. The project uses a clean, modular architecture with clear separation of concerns: -### Backend Structure (`src/backend/`) +### Backend Structure (`src/`) -The backend has been refactored into focused modules for maintainability and scalability: +The backend has been refactored into focused modules organized by domain for maintainability and scalability: +#### **Main Orchestrator** - **index.js** - Main server orchestrator (69 lines) coordinating all modules -- **socketHandlers.js** - Complete socket event processing system (400+ lines) -- **broadcastManager.js** - Centralized communication and broadcasting management -- **debugManager.js** - Debug mode and development utilities with production separation + +#### **Game Logic (`src/game/`)** - **game.js** - Game class with factory methods and proper configuration integration -- **user.js** - User management class with statistics tracking - **dungeon.js** - Dungeon generation with centralized configuration system -- **lightingAndFov.js** - Field of view calculations and lighting system - **player.js** - Player state management and movement logic - **monster.js** - Monster AI and behavior +- **lightingAndFov.js** - Field of view calculations and lighting system +- **rot.js** & **rot.min.js** - ROT.js library for roguelike mechanics + +#### **Network Communication (`src/network/`)** +- **socketHandlers.js** - Complete socket event processing system (400+ lines) +- **broadcastManager.js** - Centralized communication and broadcasting management + +#### **Database Operations (`src/db/`)** - **dbcalls.js** - Database operations for user data and game history +- **user.js** - User management class with statistics tracking + +#### **Blockchain Integration (`src/rpc/`)** - **rpccalls.js** - Wownero blockchain RPC integration +#### **Development Tools (`src/debug/`)** +- **debugManager.js** - Debug mode and development utilities with production separation + #### Modular Architecture Benefits - **Single Responsibility**: Each module has one clear purpose - **Dependency Injection**: Modules receive dependencies cleanly @@ -173,13 +185,13 @@ The architecture supports adding spectator features with minimal changes: 2. **Install dependencies**: ```bash - cd src/backend + cd src npm install ``` 3. **Start the backend server**: ```bash - cd src/backend + cd src node index.js ``` @@ -209,19 +221,27 @@ When running locally (localhost/127.0.0.1), the game includes debug features: ``` wowngeon/ ├── README.md # Project documentation -├── src/backend/ # Backend server code +├── src/ # Backend server code │ ├── index.js # Main server orchestrator (69 lines) -│ ├── socketHandlers.js # Socket event processing (400+ lines) -│ ├── broadcastManager.js # Communication management -│ ├── debugManager.js # Debug/production mode handling -│ ├── game.js # Game logic with factory methods -│ ├── user.js # User management class -│ ├── dungeon.js # Dungeon generation system -│ ├── lightingAndFov.js # Field of view calculations -│ ├── player.js # Player state management -│ ├── monster.js # Monster AI -│ ├── dbcalls.js # Database operations -│ └── rpccalls.js # Blockchain RPC calls +│ ├── package.json # Node.js dependencies +│ ├── game/ # Game logic and mechanics +│ │ ├── game.js # Game class with factory methods +│ │ ├── dungeon.js # Dungeon generation system +│ │ ├── player.js # Player state management +│ │ ├── monster.js # Monster AI +│ │ ├── lightingAndFov.js # Field of view calculations +│ │ ├── rot.js # ROT.js library +│ │ └── rot.min.js # ROT.js minified +│ ├── network/ # Network communication +│ │ ├── socketHandlers.js # Socket event processing (400+ lines) +│ │ └── broadcastManager.js # Communication management +│ ├── db/ # Database operations +│ │ ├── dbcalls.js # Database operations +│ │ └── user.js # User management class +│ ├── rpc/ # Blockchain integration +│ │ └── rpccalls.js # Blockchain RPC calls +│ └── debug/ # Development tools +│ └── debugManager.js # Debug/production mode handling ├── html/ # Frontend web interface │ ├── index.html # Main game page │ ├── js/ # Modular JavaScript diff --git a/src/backend/dbcalls.js b/src/db/dbcalls.js similarity index 100% rename from src/backend/dbcalls.js rename to src/db/dbcalls.js diff --git a/src/backend/user.js b/src/db/user.js similarity index 97% rename from src/backend/user.js rename to src/db/user.js index 7fa5a4a..455133e 100644 --- a/src/backend/user.js +++ b/src/db/user.js @@ -1,4 +1,4 @@ -const Game = require('./game'); // Ensure Game is required +const Game = require('../game/game'); // Ensure Game is required // User class definition class User { diff --git a/src/backend/debugManager.js b/src/debug/debugManager.js similarity index 99% rename from src/backend/debugManager.js rename to src/debug/debugManager.js index b7c1fd5..ec4aee5 100644 --- a/src/backend/debugManager.js +++ b/src/debug/debugManager.js @@ -4,7 +4,7 @@ * Keeps debug/development code separate from production logic */ -const rpc = require('./rpccalls.js'); +const rpc = require('../rpc/rpccalls.js'); class DebugManager { constructor(broadcastManager) { diff --git a/src/backend/dungeon.js b/src/game/dungeon.js similarity index 100% rename from src/backend/dungeon.js rename to src/game/dungeon.js diff --git a/src/backend/game.js b/src/game/game.js similarity index 100% rename from src/backend/game.js rename to src/game/game.js diff --git a/src/backend/lightingAndFov.js b/src/game/lightingAndFov.js similarity index 100% rename from src/backend/lightingAndFov.js rename to src/game/lightingAndFov.js diff --git a/src/backend/monster.js b/src/game/monster.js similarity index 100% rename from src/backend/monster.js rename to src/game/monster.js diff --git a/src/backend/player.js b/src/game/player.js similarity index 100% rename from src/backend/player.js rename to src/game/player.js diff --git a/src/backend/rot.js b/src/game/rot.js similarity index 100% rename from src/backend/rot.js rename to src/game/rot.js diff --git a/src/backend/rot.min.js b/src/game/rot.min.js similarity index 100% rename from src/backend/rot.min.js rename to src/game/rot.min.js diff --git a/src/backend/index.js b/src/index.js similarity index 86% rename from src/backend/index.js rename to src/index.js index 59cc5eb..05eaaca 100644 --- a/src/backend/index.js +++ b/src/index.js @@ -3,12 +3,12 @@ const path = require('path'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http); -var db = require('./dbcalls.js'); +var db = require('./db/dbcalls.js'); // Import modular components -const BroadcastManager = require('./broadcastManager'); -const DebugManager = require('./debugManager'); -const SocketHandlers = require('./socketHandlers'); +const BroadcastManager = require('./network/broadcastManager'); +const DebugManager = require('./debug/debugManager'); +const SocketHandlers = require('./network/socketHandlers'); // Initialize modular components const broadcastManager = new BroadcastManager(io); @@ -16,7 +16,7 @@ const debugManager = new DebugManager(broadcastManager); const activeGames = new Map(); // Maps socketId to Game objects const socketHandlers = new SocketHandlers(io, activeGames, broadcastManager, debugManager); // Configure static file serving -const htmlPath = path.join(__dirname, '../../html'); +const htmlPath = path.join(__dirname, '../html'); app.use(express.static(htmlPath)); app.use(express.json()); // Parse JSON for API endpoints @@ -50,7 +50,7 @@ io.on('connection', function(socket) { // Debug function for registered users function debugRegisteredUsers() { console.log("📊 REGISTERED USERS DEBUG:"); - const allUsers = require('./user').getAllUsers(); + const allUsers = require('./db/user').getAllUsers(); console.log(`Total registered users: ${allUsers.length}`); allUsers.forEach(user => { console.log(` - User ID: ${user.id}, Socket: ${user.socketId}, Client: ${user.clientId}`); diff --git a/src/backend/broadcastManager.js b/src/network/broadcastManager.js similarity index 100% rename from src/backend/broadcastManager.js rename to src/network/broadcastManager.js diff --git a/src/backend/socketHandlers.js b/src/network/socketHandlers.js similarity index 99% rename from src/backend/socketHandlers.js rename to src/network/socketHandlers.js index 7618a3c..d4e84dc 100644 --- a/src/backend/socketHandlers.js +++ b/src/network/socketHandlers.js @@ -3,8 +3,8 @@ * Handles all socket.io event processing for the Wowngeon game server */ -const user = require('./user'); -const Game = require('./game'); +const user = require('../db/user'); +const Game = require('../game/game'); class SocketHandlers { constructor(io, activeGames, broadcastManager, debugManager) { diff --git a/src/backend/package.json b/src/package.json similarity index 100% rename from src/backend/package.json rename to src/package.json diff --git a/src/backend/rpccalls.js b/src/rpc/rpccalls.js similarity index 100% rename from src/backend/rpccalls.js rename to src/rpc/rpccalls.js