first commit
This commit is contained in:
112
app_vue/node_modules/websocket-driver/lib/websocket/driver/server.js
generated
vendored
Normal file
112
app_vue/node_modules/websocket-driver/lib/websocket/driver/server.js
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
'use strict';
|
||||
|
||||
var util = require('util'),
|
||||
HttpParser = require('../http_parser'),
|
||||
Base = require('./base'),
|
||||
Draft75 = require('./draft75'),
|
||||
Draft76 = require('./draft76'),
|
||||
Hybi = require('./hybi');
|
||||
|
||||
var Server = function(options) {
|
||||
Base.call(this, null, null, options);
|
||||
this._http = new HttpParser('request');
|
||||
};
|
||||
util.inherits(Server, Base);
|
||||
|
||||
var instance = {
|
||||
EVENTS: ['open', 'message', 'error', 'close', 'ping', 'pong'],
|
||||
|
||||
_bindEventListeners: function() {
|
||||
this.messages.on('error', function() {});
|
||||
this.on('error', function() {});
|
||||
},
|
||||
|
||||
parse: function(chunk) {
|
||||
if (this._delegate) return this._delegate.parse(chunk);
|
||||
|
||||
this._http.parse(chunk);
|
||||
if (!this._http.isComplete()) return;
|
||||
|
||||
this.method = this._http.method;
|
||||
this.url = this._http.url;
|
||||
this.headers = this._http.headers;
|
||||
this.body = this._http.body;
|
||||
|
||||
var self = this;
|
||||
this._delegate = Server.http(this, this._options);
|
||||
this._delegate.messages = this.messages;
|
||||
this._delegate.io = this.io;
|
||||
this._open();
|
||||
|
||||
this.EVENTS.forEach(function(event) {
|
||||
this._delegate.on(event, function(e) { self.emit(event, e) });
|
||||
}, this);
|
||||
|
||||
this.protocol = this._delegate.protocol;
|
||||
this.version = this._delegate.version;
|
||||
|
||||
this.parse(this._http.body);
|
||||
this.emit('connect', new Base.ConnectEvent());
|
||||
},
|
||||
|
||||
_open: function() {
|
||||
this.__queue.forEach(function(msg) {
|
||||
this._delegate[msg[0]].apply(this._delegate, msg[1]);
|
||||
}, this);
|
||||
this.__queue = [];
|
||||
}
|
||||
};
|
||||
|
||||
['addExtension', 'setHeader', 'start', 'frame', 'text', 'binary', 'ping', 'close'].forEach(function(method) {
|
||||
instance[method] = function() {
|
||||
if (this._delegate) {
|
||||
return this._delegate[method].apply(this._delegate, arguments);
|
||||
} else {
|
||||
this.__queue.push([method, arguments]);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
for (var key in instance)
|
||||
Server.prototype[key] = instance[key];
|
||||
|
||||
Server.isSecureRequest = function(request) {
|
||||
if (request.connection && request.connection.authorized !== undefined) return true;
|
||||
if (request.socket && request.socket.secure) return true;
|
||||
|
||||
var headers = request.headers;
|
||||
if (!headers) return false;
|
||||
if (headers['https'] === 'on') return true;
|
||||
if (headers['x-forwarded-ssl'] === 'on') return true;
|
||||
if (headers['x-forwarded-scheme'] === 'https') return true;
|
||||
if (headers['x-forwarded-proto'] === 'https') return true;
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
Server.determineUrl = function(request) {
|
||||
var scheme = this.isSecureRequest(request) ? 'wss:' : 'ws:';
|
||||
return scheme + '//' + request.headers.host + request.url;
|
||||
};
|
||||
|
||||
Server.http = function(request, options) {
|
||||
options = options || {};
|
||||
if (options.requireMasking === undefined) options.requireMasking = true;
|
||||
|
||||
var headers = request.headers,
|
||||
version = headers['sec-websocket-version'],
|
||||
key = headers['sec-websocket-key'],
|
||||
key1 = headers['sec-websocket-key1'],
|
||||
key2 = headers['sec-websocket-key2'],
|
||||
url = this.determineUrl(request);
|
||||
|
||||
if (version || key)
|
||||
return new Hybi(request, url, options);
|
||||
else if (key1 || key2)
|
||||
return new Draft76(request, url, options);
|
||||
else
|
||||
return new Draft75(request, url, options);
|
||||
};
|
||||
|
||||
module.exports = Server;
|
Reference in New Issue
Block a user