Skip to content

Instantly share code, notes, and snippets.

@Raynos
Created January 31, 2014 02:02
Show Gist options
  • Save Raynos/8725363 to your computer and use it in GitHub Desktop.
Save Raynos/8725363 to your computer and use it in GitHub Desktop.
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