Move sourcecode into 'senf/' directory
[senf.git] / senf / Utils / Daemon / Mainpage.dox
diff --git a/senf/Utils/Daemon/Mainpage.dox b/senf/Utils/Daemon/Mainpage.dox
new file mode 100644 (file)
index 0000000..e73b224
--- /dev/null
@@ -0,0 +1,116 @@
+// $Id$
+//
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Stefan Bund <g0dil@berlios.de>
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the
+// Free Software Foundation, Inc.,
+// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+
+/** \mainpage Daemon process management
+
+    The Daemon class provides the infrastructure to implement robust daemon processes. A daemon
+    process is implemented by deriving from senf::Daemon and implementing the necessary (virtual)
+    member functions.
+    \code
+    #include <senf/Utils/Daemon.hh>
+    
+    class MyDaemon : public senf::Daemon
+    {
+        void configure() {
+            // Set configuration parameters like daemonize(), pidFile() etc
+            consoleLog("MyDaemon.log");
+            // The default version provided by senf::Daemon will parse some special command line
+            // parameters to configure the daemon manager. You may optionally call this version
+            // here after setting default parameters
+            senf::Daemon::configure();
+        }
+    
+        void init() {
+            // Initialize application. Setup all necessary objects. After init()
+            // has completed, the startup should not fail
+        }
+
+        void run() {
+            // Main application code should be called here.
+        }
+    };
+
+    // Provide main() function
+    SENF_DAEMON_MAIN(MyDaemon);
+    \endcode
+
+    The startup procedure is divided into three steps:
+    \li First, configure() is called. configure() should be as simple as possible. It just needs to
+        set the daemon parameters. No further setup should be done here.
+    \li init() is called after fork() but while still connected to the terminal. init() should do
+        all necessary application setup. Here, all configuration or user errors should be detected
+        and properly diagnosed.
+    \li After init() returns, the application will detach from the terminal. Now run() is called to
+        enter the application main loop.
+
+    Since there are times, where separating init() and run() into two separate functions is
+    difficult, instead of defining init() and run(), the member main() may be defined. This member
+    must call detach() as soon as initialization is completed to detach from the foreground
+    terminal.    
+    \code
+    #include <senf/Utils/Daemon.hh>
+    
+    class MyDaemon : public senf::Daemon
+    {
+        // 'configure()' like above. Don't implement 'init()' or 'run()' if you implement 'main()'.
+
+        void main() {
+            // Initialize application. Setup all necessary objects. When implementing main(), the
+            // objects will most often live on the stack.
+
+            MyAppObject app;
+
+            if (some_error)
+                // Call Daemon::exit() to terminate execution prematurely
+                exit(1);
+
+            // After initialization is complete, you *must* call 'detach()'.
+
+            detach()
+
+            // Now we can start the application main loop
+
+            app.run();
+        }
+    };
+
+    // Provide main() function
+    SENF_DAEMON_MAIN(MyDaemon);
+    \endcode
+
+    \see 
+        \ref senf::Daemon class \n
+        \ref SENF_DAEMON_MAIN() main() implementation macro
+ */
+
+\f
+// Local Variables:
+// mode: c++
+// fill-column: 100
+// comment-column: 40
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
+// compile-command: "scons -u test"
+// mode: flyspell
+// mode: auto-fill
+// End: