Created
January 31, 2014 02:02
-
-
Save Raynos/8725363 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var cache = require('continuable-cache'); | |
var extend = require('xtend/mutable'); | |
function MemoizedServer(createServer) { | |
var createCachedServer = cache(createServer); | |
var started = false; | |
var server = { | |
start: function start(callback) { | |
server.counter++; | |
var _server = createCachedServer(function () { | |
var args = arguments; | |
var self = this; | |
process.nextTick(function () { | |
callback.apply(self, args); | |
}); | |
}); | |
if (!started) { | |
started = true; | |
extend(server, _server); | |
} | |
return server; | |
}, | |
counter: 0, | |
shutdown: function shutdown(callback) { | |
server.counter--; | |
if (server.counter === 0) { | |
server.close(function () { | |
// we closed the server, reset the | |
// state machine | |
createCachedServer = cache(createServer); | |
started = false; | |
callback.apply(this, arguments); | |
}); | |
} else { | |
callback(null); | |
} | |
} | |
}; | |
return server; | |
} | |
module.exports = MemoizedServer; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment