77 * @author Ben Stahl <[email protected] > 88 */
99const http = require ( 'http' ) ;
10+ const EventEmitter = require ( 'events' ) ;
1011
1112const DataStore = require ( './stores/DataStore' ) ;
1213const HeadHandler = require ( './handlers/HeadHandler' ) ;
@@ -16,15 +17,37 @@ const PostHandler = require('./handlers/PostHandler');
1617const RequestValidator = require ( './validators/RequestValidator' ) ;
1718
1819const EXPOSED_HEADERS = require ( './constants' ) . EXPOSED_HEADERS ;
20+ const REQUEST_METHODS = require ( './constants' ) . REQUEST_METHODS ;
1921const TUS_RESUMABLE = require ( './constants' ) . TUS_RESUMABLE ;
2022
21- class TusServer {
23+ class TusServer extends EventEmitter {
2224
2325 constructor ( ) {
26+ super ( ) ;
27+
2428 // Any handlers assigned to this object with the method as the key
2529 // will be used to repond to those requests. They get set/re-set
2630 // when a datastore is assigned to the server.
2731 this . handlers = { } ;
32+
33+ // Remove any event listeners from each handler as they are removed
34+ // from the server. This must come before adding a 'newListener' listener,
35+ // to not add a 'removeListener' event listener to all request handlers.
36+ this . on ( 'removeListener' , ( event , listener ) => {
37+ this . datastore . removeListener ( event , listener ) ;
38+ REQUEST_METHODS . forEach ( ( method ) => {
39+ this . handlers [ method ] . removeListener ( event , listener ) ;
40+ } ) ;
41+ } ) ;
42+
43+ // As event listeners are added to the server, make sure they are
44+ // bubbled up from request handlers to fire on the server level.
45+ this . on ( 'newListener' , ( event , listener ) => {
46+ this . datastore . on ( event , listener ) ;
47+ REQUEST_METHODS . forEach ( ( method ) => {
48+ this . handlers [ method ] . on ( event , listener ) ;
49+ } ) ;
50+ } ) ;
2851 }
2952
3053 /**
0 commit comments