Daemon.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #ifndef DAEMON_H__
  2. #define DAEMON_H__
  3. #include <memory>
  4. #include <string>
  5. #include <ostream>
  6. namespace i2p
  7. {
  8. namespace util
  9. {
  10. class Daemon_Singleton_Private;
  11. class Daemon_Singleton
  12. {
  13. public:
  14. virtual bool init(int argc, char* argv[], std::shared_ptr<std::ostream> logstream);
  15. virtual bool init(int argc, char* argv[]);
  16. virtual bool start();
  17. virtual bool stop();
  18. virtual void run () {};
  19. bool isDaemon;
  20. bool running;
  21. protected:
  22. Daemon_Singleton();
  23. virtual ~Daemon_Singleton();
  24. bool IsService () const;
  25. // d-pointer for httpServer, httpProxy, etc.
  26. class Daemon_Singleton_Private;
  27. Daemon_Singleton_Private &d;
  28. };
  29. #if defined(QT_GUI_LIB) // check if QT
  30. #define Daemon i2p::util::DaemonQT::Instance()
  31. // dummy, invoked from RunQT
  32. class DaemonQT: public i2p::util::Daemon_Singleton
  33. {
  34. public:
  35. static DaemonQT& Instance()
  36. {
  37. static DaemonQT instance;
  38. return instance;
  39. }
  40. };
  41. #elif defined(_WIN32)
  42. #define Daemon i2p::util::DaemonWin32::Instance()
  43. class DaemonWin32 : public Daemon_Singleton
  44. {
  45. public:
  46. static DaemonWin32& Instance()
  47. {
  48. static DaemonWin32 instance;
  49. return instance;
  50. }
  51. bool init(int argc, char* argv[]);
  52. bool start();
  53. bool stop();
  54. void run ();
  55. bool isGraceful;
  56. DaemonWin32 ():isGraceful(false) {}
  57. };
  58. #elif (defined(ANDROID) && !defined(ANDROID_BINARY))
  59. #define Daemon i2p::util::DaemonAndroid::Instance()
  60. // dummy, invoked from android/jni/DaemonAndroid.*
  61. class DaemonAndroid: public i2p::util::Daemon_Singleton
  62. {
  63. public:
  64. static DaemonAndroid& Instance()
  65. {
  66. static DaemonAndroid instance;
  67. return instance;
  68. }
  69. };
  70. #else
  71. #define Daemon i2p::util::DaemonLinux::Instance()
  72. class DaemonLinux : public Daemon_Singleton
  73. {
  74. public:
  75. static DaemonLinux& Instance()
  76. {
  77. static DaemonLinux instance;
  78. return instance;
  79. }
  80. bool start();
  81. bool stop();
  82. void run ();
  83. private:
  84. std::string pidfile;
  85. int pidFH;
  86. public:
  87. int gracefulShutdownInterval; // in seconds
  88. };
  89. #endif
  90. }
  91. }
  92. #endif // DAEMON_H__