48 lines
1.3 KiB
JavaScript
48 lines
1.3 KiB
JavaScript
|
// API references:
|
||
|
//
|
||
|
// * https://html.spec.whatwg.org/multipage/comms.html#network
|
||
|
// * https://dom.spec.whatwg.org/#interface-eventtarget
|
||
|
// * https://dom.spec.whatwg.org/#interface-event
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
var util = require('util'),
|
||
|
driver = require('websocket-driver'),
|
||
|
API = require('./websocket/api');
|
||
|
|
||
|
var WebSocket = function(request, socket, body, protocols, options) {
|
||
|
options = options || {};
|
||
|
|
||
|
this._stream = socket;
|
||
|
this._driver = driver.http(request, { maxLength: options.maxLength, protocols: protocols });
|
||
|
|
||
|
var self = this;
|
||
|
if (!this._stream || !this._stream.writable) return;
|
||
|
if (!this._stream.readable) return this._stream.end();
|
||
|
|
||
|
var catchup = function() { self._stream.removeListener('data', catchup) };
|
||
|
this._stream.on('data', catchup);
|
||
|
|
||
|
API.call(this, options);
|
||
|
|
||
|
process.nextTick(function() {
|
||
|
self._driver.start();
|
||
|
self._driver.io.write(body);
|
||
|
});
|
||
|
};
|
||
|
util.inherits(WebSocket, API);
|
||
|
|
||
|
WebSocket.isWebSocket = function(request) {
|
||
|
return driver.isWebSocket(request);
|
||
|
};
|
||
|
|
||
|
WebSocket.validateOptions = function(options, validKeys) {
|
||
|
driver.validateOptions(options, validKeys);
|
||
|
};
|
||
|
|
||
|
WebSocket.WebSocket = WebSocket;
|
||
|
WebSocket.Client = require('./websocket/client');
|
||
|
WebSocket.EventSource = require('./eventsource');
|
||
|
|
||
|
module.exports = WebSocket;
|