You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.3 KiB
47 lines
1.3 KiB
// 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;
|
|
|