working
This commit is contained in:
parent
2a0ddb2769
commit
0dcf44ded3
@ -38,6 +38,9 @@ function PeerServer(options) {
|
|||||||
// before a socket is opened for a Peer.
|
// before a socket is opened for a Peer.
|
||||||
this._initializeHTTP();
|
this._initializeHTTP();
|
||||||
|
|
||||||
|
// Mark concurrent users per ip
|
||||||
|
this._ips = {};
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
setInterval(function(){
|
setInterval(function(){
|
||||||
self._pruneOutstanding();
|
self._pruneOutstanding();
|
||||||
@ -71,7 +74,8 @@ PeerServer.prototype._initializeWSS = function() {
|
|||||||
if (!self._clients[key] || !self._clients[key][id]) {
|
if (!self._clients[key] || !self._clients[key][id]) {
|
||||||
self._checkKey(key, ip, function(err) {
|
self._checkKey(key, ip, function(err) {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
self._clients[key][id] = { token: token };
|
self._clients[key][id] = { token: token, ip: ip };
|
||||||
|
self._ips[ip]++;
|
||||||
socket.send(JSON.stringify({ type: 'OPEN' }));
|
socket.send(JSON.stringify({ type: 'OPEN' }));
|
||||||
self._configureWS(socket, key, id, token);
|
self._configureWS(socket, key, id, token);
|
||||||
} else {
|
} else {
|
||||||
@ -154,16 +158,28 @@ PeerServer.prototype._configureWS = function(socket, key, id, token) {
|
|||||||
|
|
||||||
|
|
||||||
PeerServer.prototype._checkKey = function(key, ip, cb) {
|
PeerServer.prototype._checkKey = function(key, ip, cb) {
|
||||||
if (key == 'peerjs') {
|
if (key == this._options.key) {
|
||||||
if (!this._clients[key]) {
|
if (!this._clients[key]) {
|
||||||
this._clients[key] = {};
|
this._clients[key] = {};
|
||||||
}
|
}
|
||||||
if (!this._outstanding[key]) {
|
if (!this._outstanding[key]) {
|
||||||
this._outstanding[key] = {};
|
this._outstanding[key] = {};
|
||||||
}
|
}
|
||||||
|
if (!this._ips[ip]) {
|
||||||
|
this._ips[ip] = 0;
|
||||||
|
}
|
||||||
|
// Check concurrent limit
|
||||||
|
if (Object.keys(this._clients[key]).length >= this._options.concurrent_limit) {
|
||||||
|
cb('Server has reached its concurrent user limit');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this._ips[ip] >= this._options.ip_limit) {
|
||||||
|
cb(ip + ' has reached its concurrent user limit');
|
||||||
|
return;
|
||||||
|
}
|
||||||
cb(null);
|
cb(null);
|
||||||
} else {
|
} else {
|
||||||
cb('Bad key!');
|
cb('Invalid key provided');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,11 +206,13 @@ PeerServer.prototype._initializeHTTP = function() {
|
|||||||
var id = req.params.id;
|
var id = req.params.id;
|
||||||
var token = req.params.token;
|
var token = req.params.token;
|
||||||
var key = req.params.key;
|
var key = req.params.key;
|
||||||
|
var ip = req.ip;
|
||||||
|
|
||||||
if (!self._clients[key] || !self._clients[key][id]) {
|
if (!self._clients[key] || !self._clients[key][id]) {
|
||||||
self._checkKey(key, req.ip, function(err) {
|
self._checkKey(key, ip, function(err) {
|
||||||
if (!err) {
|
if (!err) {
|
||||||
self._clients[key][id] = { token: token };
|
self._clients[key][id] = { token: token, ip: ip };
|
||||||
|
self._ips[ip]++;
|
||||||
self._startStreaming(res, key, id, token, true);
|
self._startStreaming(res, key, id, token, true);
|
||||||
} else {
|
} else {
|
||||||
res.send({ type: 'ERROR', payload: { msg: err } });
|
res.send({ type: 'ERROR', payload: { msg: err } });
|
||||||
@ -311,7 +329,10 @@ PeerServer.prototype._processOutstanding = function(key, id) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
PeerServer.prototype._removePeer = function(key, id) {
|
PeerServer.prototype._removePeer = function(key, id) {
|
||||||
delete this._clients[key][id];
|
if (this._clients[key][id]) {
|
||||||
|
this._ips[this._clients[key][id].ip]--;
|
||||||
|
delete this._clients[key][id];
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Handles passing on a message. */
|
/** Handles passing on a message. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user