masq
Version:
A simple local dns server extracted from Pow
98 lines (88 loc) • 2.5 kB
JavaScript
// Generated by CoffeeScript 2.0.0-beta2
(function() {
var Daemon, DnsServer, EventEmitter, fs, path;
({EventEmitter} = require("events"));
DnsServer = require("./dns_server");
fs = require("fs");
path = require("path");
module.exports = Daemon = class Daemon extends EventEmitter {
constructor(configuration) {
super();
this.configuration = configuration;
this.dnsServer = new DnsServer(this.configuration);
process.on("SIGINT", this.stop);
process.on("SIGTERM", this.stop);
process.on("SIGQUIT", this.stop);
}
start() {
var flunk, pass, startServer;
if (this.starting || this.started) {
return;
}
this.starting = true;
startServer = function(server, port, callback) {
return process.nextTick(function() {
var err;
try {
server.on('error', callback);
server.once('listening', function() {
server.removeListener('error', callback);
return callback();
});
return server.listen(port);
} catch (error) {
err = error;
return callback(err);
}
});
};
pass = () => {
this.starting = false;
this.started = true;
return this.emit("start");
};
flunk = (err) => {
this.starting = false;
try {
this.dnsServer.close();
} catch (error) {}
return this.emit("error", err);
};
return startServer(this.dnsServer, this.configuration.dnsPort, function(err) {
if (err) {
return flunk(err);
} else {
return pass();
}
});
}
stop() {
var stopServer;
if (this.stopping || !this.started) {
return;
}
this.stopping = true;
stopServer = function(server, callback) {
return process.nextTick(function() {
var close, err;
try {
close = function() {
server.removeListener("close", close);
return callback(null);
};
server.on("close", close);
return server.close();
} catch (error) {
err = error;
return callback(err);
}
});
};
return stopServer(this.dnsServer, () => {
this.stopping = false;
this.started = false;
return this.emit("stop");
});
}
};
}).call(this);