46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // API references:
 | |
| //
 | |
| // * http://dev.w3.org/html5/websockets/
 | |
| // * http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-eventtarget
 | |
| // * http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#interface-event
 | |
| 
 | |
| 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;
 |