tcp: make server promise based.

This commit is contained in:
Christopher Jeffrey 2017-01-16 01:55:10 -08:00
parent 63b39cec56
commit 212a69697e
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
3 changed files with 49 additions and 33 deletions

View File

@ -368,22 +368,9 @@ Pool.prototype.listen = co(function* listen() {
if (!this.options.listen)
return;
yield this._listen();
yield this.server.listen(this.address.port, '0.0.0.0');
});
/**
* Listen on server socket.
* @private
* @returns {Promise}
*/
Pool.prototype._listen = function _listen() {
var self = this;
return new Promise(function(resolve, reject) {
self.server.listen(self.address.port, '0.0.0.0', co.wrap(resolve, reject));
});
};
/**
* Stop listening on server socket.
* @private
@ -397,22 +384,9 @@ Pool.prototype.unlisten = co(function* unlisten() {
if (!this.options.listen)
return;
yield this._unlisten();
yield this.server.close();
});
/**
* Unlisten on server socket.
* @private
* @returns {Promise}
*/
Pool.prototype._unlisten = function unlisten() {
var self = this;
return new Promise(function(resolve, reject) {
self.server.close(co.wrap(resolve, reject));
});
};
/**
* Handle incoming connection.
* @private

View File

@ -16,12 +16,12 @@ tcp.createSocket = function createSocket(port, host, proxy) {
tcp.createServer = function createServer() {
var server = new EventEmitter();
server.listen = function listen(port, host, callback) {
callback();
server.listen = function listen(port, host) {
server.emit('listening');
return Promise.resolve();
};
server.close = function close(callback) {
callback();
server.close = function close() {
return Promise.resolve();
};
server.address = function address() {
return {

View File

@ -6,6 +6,7 @@
'use strict';
var EventEmitter = require('events').EventEmitter;
var net = require('net');
var tcp = exports;
@ -14,5 +15,46 @@ tcp.createSocket = function createSocket(port, host, proxy) {
};
tcp.createServer = function createServer() {
return new net.Server();
var server = new net.Server();
var ee = new EventEmitter();
ee.listen = function listen(port, host) {
return new Promise(function(resolve, reject) {
server.listen(port, host, wrap(resolve, reject));
});
};
ee.close = function close() {
return new Promise(function(resolve, reject) {
server.close(wrap(resolve, reject));
});
};
ee.address = function address() {
return server.address();
};
server.on('listening', function() {
ee.emit('listening');
});
server.on('connection', function(socket) {
ee.emit('connection', socket);
});
server.on('error', function(err) {
ee.emit('error', err);
});
return ee;
};
function wrap(resolve, reject) {
return function(err, result) {
if (err) {
reject(err);
return;
}
resolve(result);
};
}