feat: integrate WorldBlockCache for efficient world block management and update logging
This commit is contained in:
@@ -5,6 +5,7 @@ import { createServer } from 'http';
|
|||||||
import * as db from './database.js';
|
import * as db from './database.js';
|
||||||
import { Turtle } from './Turtle.js';
|
import { Turtle } from './Turtle.js';
|
||||||
import { TaskDispatcher } from './TaskDispatcher.js';
|
import { TaskDispatcher } from './TaskDispatcher.js';
|
||||||
|
import { WorldBlockCache } from './WorldBlockCache.js';
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const PORT = 3001;
|
const PORT = 3001;
|
||||||
@@ -49,14 +50,14 @@ db.initializeDatabase();
|
|||||||
// Load persisted data from database
|
// Load persisted data from database
|
||||||
console.log('📂 Loading persisted data from database...');
|
console.log('📂 Loading persisted data from database...');
|
||||||
const savedHomes = db.getAllTurtleHomes();
|
const savedHomes = db.getAllTurtleHomes();
|
||||||
const savedBlocks = db.getWorldBlocks();
|
const blockCount = db.getWorldBlockCount();
|
||||||
console.log(` Loaded ${savedHomes.length} turtle homes`);
|
console.log(` Loaded ${savedHomes.length} turtle homes`);
|
||||||
console.log(` Loaded ${savedBlocks.length} world blocks`);
|
console.log(` ${blockCount} world blocks in database (demand-loaded)`);
|
||||||
|
|
||||||
// Store connected web clients and turtle data
|
// Store connected web clients and turtle data
|
||||||
const webClients = new Set();
|
const webClients = new Set();
|
||||||
const turtles = new Map(); // turtleID -> Turtle instance
|
const turtles = new Map(); // turtleID -> Turtle instance
|
||||||
const worldBlocks = new Map(); // "x,y,z" -> {name, metadata, discoveredBy, timestamp}
|
const worldBlocks = new WorldBlockCache(db, parseInt(process.env.BLOCK_CACHE_SIZE || '50000', 10));
|
||||||
const turtleHomes = new Map(); // turtleID -> {x, y, z} home position
|
const turtleHomes = new Map(); // turtleID -> {x, y, z} home position
|
||||||
const turtleConfig = new Map(); // turtleID -> {maxDistance, facing, etc}
|
const turtleConfig = new Map(); // turtleID -> {maxDistance, facing, etc}
|
||||||
|
|
||||||
@@ -65,17 +66,6 @@ for (const home of savedHomes) {
|
|||||||
turtleHomes.set(home.turtle_id, { x: home.x, y: home.y, z: home.z });
|
turtleHomes.set(home.turtle_id, { x: home.x, y: home.y, z: home.z });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load saved blocks into memory
|
|
||||||
for (const block of savedBlocks) {
|
|
||||||
const key = `${block.x},${block.y},${block.z}`;
|
|
||||||
worldBlocks.set(key, {
|
|
||||||
name: block.block_name,
|
|
||||||
metadata: block.metadata,
|
|
||||||
discoveredBy: block.discovered_by,
|
|
||||||
timestamp: block.discovered_at
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Timeout for considering turtles offline (30 seconds)
|
// Timeout for considering turtles offline (30 seconds)
|
||||||
const TURTLE_TIMEOUT = 30000;
|
const TURTLE_TIMEOUT = 30000;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user