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.
|
||||
this._initializeHTTP();
|
||||
|
||||
// Mark concurrent users per ip
|
||||
this._ips = {};
|
||||
|
||||
var self = this;
|
||||
setInterval(function(){
|
||||
self._pruneOutstanding();
|
||||
@ -71,7 +74,8 @@ PeerServer.prototype._initializeWSS = function() {
|
||||
if (!self._clients[key] || !self._clients[key][id]) {
|
||||
self._checkKey(key, ip, function(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' }));
|
||||
self._configureWS(socket, key, id, token);
|
||||
} else {
|
||||
@ -154,16 +158,28 @@ PeerServer.prototype._configureWS = function(socket, key, id, token) {
|
||||
|
||||
|
||||
PeerServer.prototype._checkKey = function(key, ip, cb) {
|
||||
if (key == 'peerjs') {
|
||||
if (key == this._options.key) {
|
||||
if (!this._clients[key]) {
|
||||
this._clients[key] = {};
|
||||
}
|
||||
if (!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);
|
||||
} else {
|
||||
cb('Bad key!');
|
||||
cb('Invalid key provided');
|
||||
}
|
||||
}
|
||||
|
||||
@ -190,11 +206,13 @@ PeerServer.prototype._initializeHTTP = function() {
|
||||
var id = req.params.id;
|
||||
var token = req.params.token;
|
||||
var key = req.params.key;
|
||||
var ip = req.ip;
|
||||
|
||||
if (!self._clients[key] || !self._clients[key][id]) {
|
||||
self._checkKey(key, req.ip, function(err) {
|
||||
self._checkKey(key, ip, function(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);
|
||||
} else {
|
||||
res.send({ type: 'ERROR', payload: { msg: err } });
|
||||
@ -311,7 +329,10 @@ PeerServer.prototype._processOutstanding = 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. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user