developertrinidad08 7e6cf29479 first commit
2023-01-16 18:11:14 -03:00

77 lines
1.8 KiB
JavaScript

var ws = require('streamws');
var EventEmitter = require('events').EventEmitter;
var util = require('./util');
var BinaryClient = require('./client').BinaryClient;
function BinaryServer(options) {
if (!(this instanceof BinaryServer)) return new BinaryServer(options);
var self = this;
options = util.extend({
host: '0.0.0.0',
chunkSize: 40960
}, options);
this.clients = {};
this._clientCounter = 0;
if (options.server && (options.server instanceof ws.Server)) {
this._server = options.server;
} else {
this._server = new ws.Server(options);
}
this._server.on('connection', function(socket){
var clientId = self._clientCounter;
var binaryClient = new BinaryClient(socket, options);
binaryClient.id = clientId;
self.clients[clientId] = binaryClient;
self._clientCounter++;
binaryClient.on('close', function(){
delete self.clients[clientId];
});
self.emit('connection', binaryClient);
});
this._server.on('error', function(error){
self.emit('error', error);
});
}
util.inherits(BinaryServer, EventEmitter);
BinaryServer.prototype.close = function(code, message){
this._server.close(code, message);
}
exports.BinaryClient = BinaryClient;
exports.BinaryServer = BinaryServer;
// Expose a method similar to http.createServer
//
// usage:
// var fs = require('fs');
// require('binaryjs').createServer(function(c) {
// fs.createReadStream('some.bin').pipe(c);
// });
//
exports.createServer = function(fn) {
var server;
return {
listen : function(port, opts) {
opts = opts || {};
opts.port = port;
var server = new BinaryServer(opts);
server.on('connection', function(conn) {
fn && fn(conn.createStream());
});
return server;
}
}
};