Packets/DefaultBundle: Document finalize() action
[senf.git] / Utils / DaemonTools.cc
index 06db1a0..c8fe63e 100644 (file)
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
-
 #include "Exception.hh"
 
 //#include "DaemonTools.mpp"
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
 
+///////////////////////////////////////////////////////////////////////////
+// senf::Daemon
+
+prefix_ senf::Daemon::~Daemon()
+{}
+
+prefix_ void senf::Daemon::daemonize(bool v)
+{
+    daemonize_ = v;
+}
+
+prefix_ bool senf::Daemon::daemon()
+{
+    return daemonize_;
+}
+
+prefix_ void senf::Daemon::consoleLog(std::string path, StdStream which)
+{
+    int fd (-1);
+    if (! path.empty()) {
+        int fd (::open(path.c_str(), O_WRONLY | O_APPEND));
+        if (fd < 0)
+            throwErrno("open()");
+    }
+    switch (which) {
+    case StdOut:
+        stdout_ = fd;
+        break;
+    case StdErr:
+        stderr_ = fd;
+        break;
+    case Both:
+        stdout_ = fd;
+        stderr_ = fd;
+        break;
+    }
+}
+
+prefix_ void senf::Daemon::pidFile(std::string f, bool unique)
+{
+    pidfile_ = f;
+    unique_ = unique;
+}
+
+prefix_ void senf::Daemon::detach()
+{}
+
+prefix_ int senf::Daemon::start(int argc, char const ** argv)
+{
+    argc_ = argc;
+    argv_ = argv;
+
+    configure();
+    if (daemonize_)
+        fork();
+    if (! pidfile_.empty())
+        pidfileCreate();
+    main();
+    return 0;
+}
+
+////////////////////////////////////////
+// protected members
+
+prefix_ senf::Daemon::Daemon()
+    : argc_(0), argv_(0), daemonize_(true), stdout_(-1), stderr_(-1), pidfile_(""), unique_(true),
+      detached_(false)
+{}
+
+////////////////////////////////////////
+// private members
+
+prefix_ void senf::Daemon::configure()
+{}
+
+prefix_ void senf::Daemon::main()
+{
+    init();
+    detach();
+    run();
+}
+
+prefix_ void senf::Daemon::init()
+{}
+
+prefix_ void senf::Daemon::run()
+{}
+
+prefix_ void senf::Daemon::pidfileCreate()
+{}
+
+///////////////////////////////////////////////////////////////////////////
+
 prefix_ void senf::daemonize()
 {
     int pid = fork();