08-27-周三_17-09-29
This commit is contained in:
88
node_modules/faye-websocket/lib/faye/websocket/api.js
generated
vendored
Normal file
88
node_modules/faye-websocket/lib/faye/websocket/api.js
generated
vendored
Normal file
@@ -0,0 +1,88 @@
|
||||
var EventTarget = require('./api/event_target'),
|
||||
Event = require('./api/event');
|
||||
|
||||
var API = {
|
||||
CONNECTING: 0,
|
||||
OPEN: 1,
|
||||
CLOSING: 2,
|
||||
CLOSED: 3,
|
||||
|
||||
_open: function() {
|
||||
if (this._parser && !this._parser.isOpen()) return;
|
||||
this.readyState = API.OPEN;
|
||||
|
||||
var buffer = this._sendBuffer || [],
|
||||
message;
|
||||
|
||||
while (message = buffer.shift())
|
||||
this.send.apply(this, message);
|
||||
|
||||
var event = new Event('open');
|
||||
event.initEvent('open', false, false);
|
||||
this.dispatchEvent(event);
|
||||
},
|
||||
|
||||
receive: function(data) {
|
||||
if (this.readyState !== API.OPEN) return false;
|
||||
var event = new Event('message');
|
||||
event.initEvent('message', false, false);
|
||||
event.data = data;
|
||||
this.dispatchEvent(event);
|
||||
},
|
||||
|
||||
send: function(data, type, errorType) {
|
||||
if (this.readyState === API.CONNECTING) {
|
||||
if (this._sendBuffer) {
|
||||
this._sendBuffer.push(arguments);
|
||||
return true;
|
||||
} else {
|
||||
throw new Error('Cannot call send(), socket is not open yet');
|
||||
}
|
||||
}
|
||||
|
||||
if (this.readyState === API.CLOSED)
|
||||
return false;
|
||||
|
||||
if (!(data instanceof Buffer)) data = String(data);
|
||||
|
||||
var frame = this._parser.frame(data, type, errorType);
|
||||
try {
|
||||
this._stream.write(frame, 'binary');
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
close: function(code, reason, ack) {
|
||||
if (this.readyState === API.CLOSED) return;
|
||||
if (this.readyState === API.CLOSING && ack !== false) return;
|
||||
|
||||
var finalize = function() {
|
||||
this.readyState = API.CLOSED;
|
||||
if (this._pingLoop) clearInterval(this._pingLoop);
|
||||
if (this._stream) this._stream.end();
|
||||
var event = new Event('close', {code: code || 1000, reason: reason || ''});
|
||||
event.initEvent('close', false, false);
|
||||
this.dispatchEvent(event);
|
||||
};
|
||||
|
||||
if (this.readyState === API.CONNECTING)
|
||||
return finalize.call(this);
|
||||
|
||||
this.readyState = API.CLOSING;
|
||||
|
||||
if (ack === false) {
|
||||
if (this._parser.close) this._parser.close(code, reason);
|
||||
finalize.call(this);
|
||||
} else {
|
||||
if (this._parser.close) this._parser.close(code, reason, finalize, this);
|
||||
else finalize.call(this);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for (var key in EventTarget) API[key] = EventTarget[key];
|
||||
|
||||
module.exports = API;
|
||||
|
Reference in New Issue
Block a user