bc/bc.js

100 lines
5.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// bc.js - Главный файл сервера Battle Club
const express = require('express');
const http = require('http'); // Используем HTTP, так как SSL терминируется Apache
const { Server } = require('socket.io');
const path = require('path');
// Импорт ваших серверных модулей (предполагаем, что они есть и работают)
// const auth = require('./server_modules/auth');
// const GameManager = require('./server_modules/gameManager');
// const db = require('./server_modules/db');
// const GAME_CONFIG = require('./server_modules/config');
const app = express();
const server = http.createServer(app);
const BC_APP_INTERNAL_PORT = 3200; // Внутренний порт, на котором слушает bc.js
const BC_APP_INTERNAL_HOST = '127.0.0.1'; // Слушать только на localhost
const PUBLIC_PATH_PREFIX = '/battleclub'; // Публичный префикс пути, по которому приложение доступно через Apache
// Настройка Socket.IO
// Клиент будет подключаться к /battleclub/socket.io/
const io = new Server(server, {
path: `${PUBLIC_PATH_PREFIX}/socket.io`,
cors: {
origin: "https://pavel-chagovsky.com", // Укажите ваш домен для безопасности
// origin: "*", // Для разработки можно оставить, но для продакшена лучше конкретный домен
methods: ["GET", "POST"]
}
});
// Middleware для логирования каждого запроса (полезно для отладки)
app.use((req, res, next) => {
console.log(`[BC App] Request: ${req.method} ${req.originalUrl}`);
next();
});
// Раздача статических файлов из папки 'public'
// Так как Apache проксирует /battleclub/ на корень этого Express-приложения,
// Express должен отдавать статику от своего корня.
// В HTML ссылки на статику должны быть относительными или начинаться с /battleclub/
// Например, если в public/js/client.js, то в HTML: <script src="/battleclub/js/client.js"></script>
// Или, если index.html отдается с /battleclub/, то <script src="js/client.js"></script>
app.use(express.static(path.join(__dirname, 'public')));
// Пример простого маршрута API, если он нужен (доступен по /battleclub/api/test)
app.get('/api/test', (req, res) => {
res.json({ message: 'Battle Club API is working!' });
});
// Если ваше основное приложение - это SPA (Single Page Application),
// вам может понадобиться отдавать index.html для всех не-API и не-статических путей,
// начинающихся с префикса /battleclub/. Но так как Apache проксирует /battleclub/ на /,
// то Express будет видеть пути без /battleclub/.
// Поэтому, если index.html должен отдаваться для /battleclub/ или /battleclub/some/path,
// то здесь нужен роут для '*' или специфичные роуты.
// Пока для простоты, предположим, что Apache проксирует /battleclub/ на корень bc.js,
// и index.html находится в public/ и запрашивается как /battleclub/index.html (или просто /battleclub/)
app.get('/', (req, res) => {
// Этот роут будет срабатывать, если Apache проксировал /battleclub/ на / этого приложения
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
// --- Обработчики событий Socket.IO ---
io.on('connection', (socket) => {
console.log(`[BC App Socket.IO] User connected: ${socket.id} to path ${socket.nsp.name}`);
socket.on('messageFromClient', (data) => {
console.log(`[BC App Socket.IO] Message from client ${socket.id}:`, data);
socket.emit('messageFromServer', { text: `Server received: ${data.text}` });
});
socket.on('disconnect', (reason) => {
console.log(`[BC App Socket.IO] User disconnected: ${socket.id} (Reason: ${reason})`);
});
// ... ваши обработчики auth, GameManager и т.д. ...
// Убедитесь, что они не полагаются на префикс пути /battleclub/ во внутренних данных,
// так как Express его "не видит" после проксирования Apache.
});
// Запуск HTTP сервера
server.listen(BC_APP_INTERNAL_PORT, BC_APP_INTERNAL_HOST, () => {
alert("test");
console.log(`Battle Club HTTP Application Server running at http://${BC_APP_INTERNAL_HOST}:${BC_APP_INTERNAL_PORT}`);
console.log(`Socket.IO will be available via proxy at path: ${PUBLIC_PATH_PREFIX}/socket.io`);
console.log(`Serving static files from: ${path.join(__dirname, 'public')}`);
});
// Обработчики глобальных ошибок
process.on('unhandledRejection', (reason, promise) => {
console.error('[BC App UNHANDLED REJECTION] At:', promise, 'reason:', reason);
});
process.on('uncaughtException', (err) => {
console.error('[BC App UNCAUGHT EXCEPTION] Caught exception:', err);
// process.exit(1); // В продакшене может быть оправдано
});