summaryrefslogtreecommitdiff
path: root/node_modules/socket.io/lib/client.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/socket.io/lib/client.js')
-rw-r--r--node_modules/socket.io/lib/client.js167
1 files changed, 167 insertions, 0 deletions
diff --git a/node_modules/socket.io/lib/client.js b/node_modules/socket.io/lib/client.js
new file mode 100644
index 0000000..d80067b
--- /dev/null
+++ b/node_modules/socket.io/lib/client.js
@@ -0,0 +1,167 @@
+
+/**
+ * Module dependencies.
+ */
+
+var parser = require('socket.io-client').parser
+ , EventEmitter = require('events').EventEmitter
+
+/**
+ * Client constructor.
+ *
+ * @api public
+ */
+
+function Client (id, server) {
+ this.id = id;
+ this.acks = {};
+ this.store = server.store;
+
+ var self = this;
+
+ store.subscribe(id, function (packet) {
+
+ });
+
+ store.subscribe(id + '.disconect', function () {
+ self.onDisconnect();
+ });
+}
+
+/**
+ * Inherits from EventEmitter.
+ */
+
+Client.prototype.__proto__ = EventEmitter.prototype;
+
+/**
+ * Save reference to original `emit`.
+ *
+ * @api private
+ */
+
+Client.prototype._emit = Client.prototype.emit;
+
+/**
+ * Broadcast flag.
+ *
+ * @api public
+ */
+
+Client.prototype.__defineGetter__('broadcast', function () {
+ this.flags.broadcast = true;
+});
+
+/**
+ * JSON flag (deprecated)
+ *
+ * @api public
+ */
+
+Client.prototype.__defineGetter__('json', function () {
+ this.flags.broadcast = true;
+});
+
+/**
+ * Joins a group.
+ *
+ * @param {String} group
+ * @return {Client} for chaining
+ * @api public
+ */
+
+Client.prototype.join = function (group, fn) {
+ if (!~this.subscriptions.indexOf(group)) {
+ var self = this;
+ this.subscriptions.push(group);
+ this.store.addToGroup(group, this.sid, function (ev, args) {
+ self.onGroupEvent(ev, args);
+ }, fn);
+ } else {
+ fn && fn();
+ }
+
+ return this;
+};
+
+/**
+ * Leaves a group.
+ *
+ * @return {Client} for chaining
+ * @api public
+ */
+
+Client.prototype.leave = function (group) {
+ var index = this.subscriptions.indexOf(group);
+ if (~index) {
+ this.subscriptions.splice(index, 1);
+ }
+ return this;
+};
+
+Client.prototype.disconnect = function () {
+ if (this.socket) {
+ this.socket.disconnect();
+ } else {
+ this.publish('disconnect');
+ }
+}
+
+/**
+ * Called upon disconnect.
+ *
+ * @api private
+ */
+
+Client.prototype.onDisconnect = function () {
+ for (var i = 0, l = this.subscriptions; i < l; i++) {
+ this.store.removeFromGroup(id, group, fn);
+ }
+};
+
+/**
+ * Registers ACK.
+ */
+
+Client.prototype.ack = function (fn, callback) {
+ this.subscribe('ack');
+};
+
+/**
+ * Emits an event.
+ */
+
+Client.prototype.emit = function () {
+ var args = toArray(arguments), fn;
+
+ if ('function' == typeof args[args.length - 1]) {
+ fn = args.pop();
+ }
+
+ var data = args.shift();
+ if (args.length) {
+ data += '\n' + JSON.stringify(args);
+ }
+
+ if (fn) {
+ this.ack(fn, function (id) {
+ self.sendPacket('event', data, id);
+ });
+ } else {
+ this.sendPacket('event', data);
+ }
+
+ return this;
+};
+
+/**
+ * Sends a packet.
+ */
+
+Client.prototype.sendPacket = function (type, data, id) {
+ var data = parser.encode({ type: type, data: data, id: id });
+
+ if (this.server.sockets[id]) {
+ this.server.sockets[id].write(data);
+ }
+};