Skip to content

Commit

Permalink
Emit close event when the server closes
Browse files Browse the repository at this point in the history
  • Loading branch information
wsmd committed Feb 11, 2018
1 parent 02a2410 commit 018c916
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 1 deletion.
8 changes: 7 additions & 1 deletion docs/api.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ Emitted each time a socket is connected but is not handled by any handlers. By d

Emitted each time a socket is connected and handled by a handler.

### Event: 'close'

Emitted when the server closes.

### server.createHandler(options)

- `options` `<Object>`
Expand All @@ -44,7 +48,9 @@ If any of these three attributes is passed to `options` an error will be thrown.

Returns a new [`WebSocket.Server`](https://github.com/websockets/ws/blob/master/doc/ws.md#class-websocketserver) instance of `ws`. Please refer the the `ws` documentation for more information on this.

### server.close()
### server.close([callback])

- `callback` `<function>`

Stops the server from accepting new connections.

Expand Down
4 changes: 4 additions & 0 deletions lib/MultipathServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@ const { inherits } = require('util');
const { invariant, withoutProperties } = require('./utils');
const { createHandlerCreator } = require('./createHandlerCreator');
const { rejectSocket } = require('./rejectSocket');
const { delegateEmittedEvents } = require('./delegateEmittedEvents');

const HTTP_EVENTS_TO_EXPOSE = ['close'];
const PRIVATE_ATTRS = ['port', 'autoListen'];

const defaults = {
Expand All @@ -31,6 +33,8 @@ function MultipathServer(options) {
const handlers = {};
const server = createServer();

delegateEmittedEvents(HTTP_EVENTS_TO_EXPOSE, server, this);

// Handle an HTTP upgrade request by delegating that request to the proper
// websocket server if it exists
server.on('upgrade', (request, socket, head) => {
Expand Down
17 changes: 17 additions & 0 deletions lib/delegateEmittedEvents.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
'use-strict';

/**
* Delegate events emitted from one EventEmitter to another
* @param {Array<string>} events Events to be delegated
* @param {EventEmitter} source Original EventEmitter to listen to
* @param {EventEmitter} target Target EventEmitter to emit events of the source
*/
function delegateEmittedEvents(events, source, target) {
for (let event of events) {
source.on(event, (...args) => target.emit(event, ...args));
}
}

module.exports = {
delegateEmittedEvents,
};
6 changes: 6 additions & 0 deletions test/MultipathServer.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,12 @@ describe('MultipathServer', () => {
});
});

it('emits close event', (done) => {
createMultipathServer();
server.on('close', done);
server.close();
});

it('throws when creating duplicate handlers', () => {
createMultipathServer();
server.createHandler({ path: '/foo' });
Expand Down

0 comments on commit 018c916

Please sign in to comment.