App-SocialCalc-Multiplayer
view release on metacpan or search on metacpan
socialcalc/third-party/Socket.IO-node/lib/socket.io/client.js view on Meta::CPAN
var urlparse = require('url').parse
, OutgoingMessage = require('http').OutgoingMessage
, Stream = require('net').Stream
, options = require('./utils').options
, encode = require('./utils').encode
, decode = require('./utils').decode
, merge = require('./utils').merge
, util = require(process.binding('natives').util ? 'util' : 'sys');
var Client = module.exports = function(listener, req, res, options, head){
process.EventEmitter.call(this);
this.listener = listener;
this.options(merge({
timeout: 8000,
heartbeatInterval: 10000,
closeTimeout: 0
}, this.getOptions ? this.getOptions() : {}), options);
this.connections = 0;
this._open = false;
this._heartbeats = 0;
this.connected = false;
this.upgradeHead = head;
this._onConnect(req, res);
};
util.inherits(Client, process.EventEmitter);
Client.prototype.send = function(message){
if (!this._open || !(this.connection.readyState === 'open' || this.connection.readyState === 'writeOnly')){
return this._queue(message);
}
this._write(encode(message));
return this;
};
Client.prototype.broadcast = function(message){
if (!('sessionId' in this)) return this;
this.listener.broadcast(message, this.sessionId);
return this;
};
Client.prototype._onMessage = function(data){
var messages = decode(data);
if (messages === false) return this.listener.options.log('Bad message received from client ' + this.sessionId);
for (var i = 0, l = messages.length, frame; i < l; i++){
frame = messages[i].substr(0, 3);
switch (frame){
case '~h~':
return this._onHeartbeat(messages[i].substr(3));
case '~j~':
try {
messages[i] = JSON.parse(messages[i].substr(3));
} catch(e) {
messages[i] = {};
}
break;
}
this.emit('message', messages[i]);
this.listener._onClientMessage(messages[i], this);
}
};
Client.prototype._onConnect = function(req, res){
var self = this
, attachConnection = !this.connection;
this.request = req;
this.response = res;
( run in 1.237 second using v1.01-cache-2.11-cpan-437f7b0c052 )