mirror of
https://github.com/webxoss/webxoss-core.git
synced 2024-11-20 06:49:53 +01:00
167 lines
4.1 KiB
JavaScript
167 lines
4.1 KiB
JavaScript
'use strict';
|
|
|
|
// node env only
|
|
|
|
global.Random = require("random-js");
|
|
require("./util.js");
|
|
require("./Callback.js");
|
|
require("./Game.js");
|
|
require("./Phase.js");
|
|
require("./IO.js");
|
|
require("./Player.js");
|
|
require("./Card.js");
|
|
require("./Zone.js");
|
|
require("./CardInfo.js");
|
|
require("./Timming.js");
|
|
require("./Mask.js");
|
|
require("./ConstEffect.js");
|
|
require("./ConstEffectManager.js");
|
|
require("./Effect.js");
|
|
require("./EffectManager.js");
|
|
require("./Client.js");
|
|
require("./Room.js");
|
|
require("./RoomManager.js");
|
|
|
|
var noStaticServe = process.argv.slice(2).some(function(arg) {
|
|
return arg === 'no-static-server';
|
|
});
|
|
// static server
|
|
if (!noStaticServe) {
|
|
var express = require('express');
|
|
var compression = require('compression');
|
|
var app = express();
|
|
var server = require('http').Server(app);
|
|
app.use(compression());
|
|
app.use('/background', express.static(__dirname + '/webxoss-client/images', {
|
|
maxAge: '2h'
|
|
}));
|
|
app.use('/images', express.static(__dirname + '/webxoss-client/images', {
|
|
maxAge: '30d'
|
|
}));
|
|
app.use(express.static(__dirname + '/webxoss-client'));
|
|
var port = 80;
|
|
process.argv.slice(2).forEach(function(arg) {
|
|
var match = arg.match(/^port=(\d+)/)
|
|
if (match) {
|
|
port = +match[1];
|
|
}
|
|
});
|
|
server.listen(port);
|
|
console.log('listen to 127.0.0.1:' + port);
|
|
}
|
|
// game server
|
|
var getArg = function(key) {
|
|
var value = '';
|
|
process.argv.slice(2).forEach(function(arg) {
|
|
if (arg.indexOf(key + '=') === 0) {
|
|
value = arg.replace(key + '=', '');
|
|
}
|
|
});
|
|
return value;
|
|
};
|
|
var gameServer
|
|
if (getArg('key')) {
|
|
var fs = require('fs');
|
|
gameServer = require('https').createServer({
|
|
key: fs.readFileSync(getArg('key')),
|
|
cert: fs.readFileSync(getArg('cert')),
|
|
ca: fs.readFileSync(getArg('ca')),
|
|
});
|
|
} else {
|
|
gameServer = require('http').createServer();
|
|
}
|
|
var io = require('socket.io')(gameServer, {
|
|
pingTimeout: 30000,
|
|
maxHttpBufferSize: 1024 * 1024,
|
|
});
|
|
gameServer.listen(2015);
|
|
|
|
var cfg = {
|
|
MAX_ROOMS: 100,
|
|
MAX_CLIENTS: 500,
|
|
MAX_ROOM_NAME_LENGTH: 15,
|
|
MAX_NICKNAME_LENGTH: 10,
|
|
MAX_PASSWORD_LENGTH: 15
|
|
};
|
|
var roomManager = new RoomManager(cfg);
|
|
var MAX_SOCKETS = 500;
|
|
// var MAX_SOCKETS_PER_IP = 50;
|
|
// var ipTable = {};
|
|
function getSocketCount() {
|
|
if (!io.sockets) return 0;
|
|
return Object.keys(io.sockets.connected).length;
|
|
}
|
|
io.use(function(socket, next) {
|
|
if (getSocketCount() >= MAX_SOCKETS) {
|
|
next(new Error('MAX_SOCKETS'));
|
|
return;
|
|
}
|
|
// var handshake = socket.request;
|
|
// var ip = handshake.connection.remoteAddress;
|
|
// if (!ip) {
|
|
// next();
|
|
// return;
|
|
// }
|
|
// if (ip in ipTable) {
|
|
// if (ipTable[ip] >= MAX_SOCKETS_PER_IP) {
|
|
// console.log('MAX_SOCKETS_PER_IP: %s',ip);
|
|
// next(new Error('MAX_SOCKETS_PER_IP'));
|
|
// return;
|
|
// } else {
|
|
// ipTable[ip]++;
|
|
// }
|
|
// } else {
|
|
// ipTable[ip] = 1;
|
|
// }
|
|
// socket.on('disconnect',function () {
|
|
// console.log('disconnect: %s, count: %s',ip,getSocketCount());
|
|
// if (ip in ipTable) {
|
|
// if (ipTable[ip] <= 1) {
|
|
// delete ipTable[ip];
|
|
// } else {
|
|
// ipTable[ip]--;
|
|
// }
|
|
// }
|
|
// });
|
|
next();
|
|
});
|
|
io.on('connect', function(socket) {
|
|
var req = socket.request;
|
|
if (req.connection.destroyed) {
|
|
console.log('req.connection.destroyed');
|
|
return;
|
|
}
|
|
var query = require('url').parse(req.url, true).query;
|
|
// console.log('connect: %s, count: %s',req.connection.remoteAddress,getSocketCount());
|
|
// console.log(query.clientId);
|
|
roomManager.createClient(socket, +query.clientId);
|
|
|
|
// test
|
|
// socket.on('force disconnect',function () {
|
|
// socket.disconnect();
|
|
// });
|
|
|
|
// for debug
|
|
if (typeof process === 'undefined') return;
|
|
var password = '';
|
|
process.argv.slice(2).forEach(function(arg) {
|
|
var match = arg.match(/^debug_password=(\S+)/)
|
|
if (match) {
|
|
password = match[1];
|
|
}
|
|
});
|
|
if (!password) return;
|
|
socket.on('debug', function(psw) {
|
|
if (psw !== password) return;
|
|
try {
|
|
var path = require('path');
|
|
var filePath = './debug.js';
|
|
delete require.cache[path.resolve(filePath)];
|
|
require(filePath);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
});
|
|
});
|
|
|
|
exports.roomManager = roomManager;
|