69 lines
2.7 KiB
JavaScript
69 lines
2.7 KiB
JavaScript
// server.js
|
||
const express = require('express');
|
||
const http = require('http');
|
||
const socketIo = require('socket.io');
|
||
const path = require('path');
|
||
const GameManager = require('./server_modules/gameManager');
|
||
const hostname = '81.177.140.16';
|
||
const app = express();
|
||
const server = http.createServer(app);
|
||
const io = socketIo(server);
|
||
|
||
const PORT = process.env.PORT || 3200;
|
||
|
||
app.use(express.static(path.join(__dirname, 'public')));
|
||
|
||
const gameManager = new GameManager(io);
|
||
|
||
io.on('connection', (socket) => {
|
||
console.log('New client connected:', socket.id);
|
||
|
||
const availableGames = gameManager.getAvailablePvPGamesListForClient();
|
||
socket.emit('availablePvPGamesList', availableGames);
|
||
|
||
socket.on('requestPvPGameList', () => {
|
||
const currentAvailableGames = gameManager.getAvailablePvPGamesListForClient();
|
||
socket.emit('availablePvPGamesList', currentAvailableGames);
|
||
});
|
||
|
||
socket.on('createGame', (data) => { // data = { mode: 'ai' | 'pvp' }
|
||
gameManager.createGame(socket, data.mode);
|
||
});
|
||
|
||
socket.on('joinGame', (data) => { // Ожидаем data = { gameId: 'СТРОКА' }
|
||
if (data && typeof data.gameId === 'string') {
|
||
gameManager.joinGame(socket, data.gameId);
|
||
} else {
|
||
console.warn(`[bc.js] Неверный формат данных для joinGame от ${socket.id}:`, data);
|
||
socket.emit('gameError', { message: 'Ошибка присоединения: неверный формат ID игры.' });
|
||
}
|
||
});
|
||
|
||
socket.on('findRandomGame', () => {
|
||
gameManager.findAndJoinRandomPvPGame(socket);
|
||
});
|
||
|
||
// ИЗМЕНЕНО: Убрана проверка на data.gameId для playerAction
|
||
socket.on('playerAction', (data) => {
|
||
// gameManager.handlePlayerAction определит игру по socket.id
|
||
// и передаст data в GameInstance.
|
||
gameManager.handlePlayerAction(socket.id, data);
|
||
});
|
||
|
||
socket.on('requestRestart', (data) => { // Ожидаем data = { gameId: 'СТРОКА' }
|
||
if (data && typeof data.gameId === 'string') {
|
||
gameManager.requestRestart(socket.id, data.gameId);
|
||
} else {
|
||
console.warn(`[bc.js] Неверный формат данных для requestRestart от ${socket.id}:`, data);
|
||
socket.emit('gameError', { message: 'Ошибка рестарта: неверный формат ID игры.' });
|
||
}
|
||
});
|
||
|
||
|
||
socket.on('disconnect', () => {
|
||
console.log('Client disconnected:', socket.id);
|
||
gameManager.handleDisconnect(socket.id);
|
||
});
|
||
});
|
||
|
||
server.listen(PORT, hostname, () => console.log(`Server listening on ${hostname}:${PORT}`)); |