import { DEFAULT_PORT, ComputeBackend, loadRapier } from '@rapierphysicsplugin/shared'; import { PhysicsServer } from './server.js'; export { PhysicsServer } from './server.js'; export { PhysicsWorld } from './physics-world/index.js'; export { Room } from './room.js'; export { RoomManager } from './room-manager.js'; export { ClientConnection } from './client-connection.js'; export { SimulationLoop } from './simulation-loop.js'; export { StateManager } from './state-manager.js'; export { InputBuffer } from './input-buffer.js'; async function main(): Promise { const backend = (process.env.PHYSICS_BACKEND as ComputeBackend) ?? ComputeBackend.WASM_SIMD; console.log(`Initializing Rapier WASM (${backend})...`); const RAPIER = await loadRapier({ backend }); console.log('Rapier initialized.'); const port = parseInt(process.env.PORT || String(DEFAULT_PORT), 10); const server = new PhysicsServer(RAPIER); await server.start(port); // Graceful shutdown process.on('SIGINT', () => { console.log('\nShutting down...'); server.stop(); process.exit(0); }); process.on('SIGTERM', () => { console.log('\nShutting down...'); server.stop(); process.exit(0); }); } // Only run main when executed directly const isMainModule = process.argv[1]?.endsWith('index.ts') || process.argv[1]?.endsWith('index.js'); if (isMainModule) { main().catch(console.error); }