reisarod's picture
Upload folder using huggingface_hub
5fae594 verified
'use strict';
/*
* Dependencies
*/
var Namespace = require('./namespace');
/*
* Room Constructor
*/
var Room = function Room (id) {
this.id = id;
this.sockets = [];
this._namespaces = {};
};
/*
* (Static) Rooms
* Holds all the rooms in existance
*/
Room.rooms = {};
/*
* (Static) Get
* Get or create a room
*
* - id (string)
* > room
*/
Room.get = function get (id) {
var room = Room.rooms[id];
if (! room) {
room = Room.rooms[id] = new Room(id);
}
return room;
};
/*
* (Static) Flush
* Remove all the rooms
*/
Room.flush = function flush () {
for (var id in Room.rooms) {
Room.get(id).empty();
delete Room.rooms[id];
}
};
/*
* (Private) Join
* Add a socket to the room
*
* - socket (socket)
*/
Room.prototype._join = function _join (socket) {
if (this.sockets.indexOf(socket) < 0) {
this.sockets.push(socket);
}
return this;
};
/*
* (Private) Leave
* Remove a socket from the room
*
* - socket (socket)
*/
Room.prototype._leave = function _leave (socket) {
var index = this.sockets.indexOf(socket);
if (index >= 0) {
this.sockets.splice(index, 1);
}
return this;
};
/*
* In
* Get another room of sockets
* So you can do `Jandal.sockets.in('room').emit('hi');`
*
* - id (int) : id of the room
* > room
*/
Room.prototype.in = function in_ (id) {
return Room.get(id);
};
/*
* Length
* The number of sockets in the room
*
* > int
*/
Room.prototype.length = function length () {
return this.sockets.length;
};
/*
* Emit
* Emit an event to everyone in the room
*
* - event (string)
* - args... (mixed)
*/
Room.prototype.emit = function emit (event, arg1, arg2, arg3) {
for (var i = 0, len = this.sockets.length; i < len; i++) {
this.sockets[i].emit(event, arg1, arg2, arg3);
}
return this;
};
/*
* Broadcast
* Emit events to everyone but the sender
*
* - sender (socket)
* - event (string)
* - args... (mixed)
*/
Room.prototype.broadcast = function broadcast (sender, event, arg1, arg2, arg3) {
for (var i = 0, len = this.sockets.length; i < len; i++) {
var socket = this.sockets[i];
if (socket.id !== sender) {
socket.emit(event, arg1, arg2, arg3);
}
}
return this;
};
/*
* Namespace
* Get (and maybe create) a namespace for this room
*
* - name (string) : name of the namespace
* > namespace
*/
Room.prototype.namespace = function namespace (name) {
var ns = this._namespaces[name];
ns = ns ? ns : this._namespaces[name] = new Namespace(name, this);
return ns;
};
/*
* Contains
* Checks if a socket is already in a room
*
* - socket (socket)
* > boolean
*/
Room.prototype.contains = function contains (socket) {
for (var i = 0, len = this.sockets.length; i < len; i++) {
if (this.sockets[i] === socket) {
return true;
}
}
return false;
};
/*
* Destroy
* Remove all sockets from a room
*/
Room.prototype.empty = function empty () {
for (var i = this.sockets.length - 1; i >= 0; i--) {
this._leave(this.sockets[i]);
}
};
/*
* Release
* Empty the room and delete it from Room.rooms
*/
Room.prototype.release = function () {
this.empty();
delete Room.rooms[this.id];
};
module.exports = Room;