vendor_base.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #ifndef __VENDOR_VENDOR_BASE_H__
  2. #define __VENDOR_VENDOR_BASE_H__
  3. #include <condition_variable>
  4. #include <cstdio>
  5. #include <fstream>
  6. #include <functional>
  7. #include <getopt.h>
  8. #include <iostream>
  9. #include <memory>
  10. #include <mutex>
  11. #include <sstream>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <string>
  15. #include <sys/stat.h>
  16. #include <sys/time.h>
  17. #include <thread>
  18. #include <unistd.h>
  19. #include <utils/logger.h>
  20. #include <uv.h>
  21. #include <vector>
  22. #ifndef WIN32
  23. #include <execinfo.h>
  24. #endif
  25. namespace vendor {
  26. class VendorBase;
  27. struct MyOpt {
  28. const char *name;
  29. int has_arg;
  30. int val;
  31. const char *desc;
  32. };
  33. struct LongOpts {
  34. const MyOpt *myOpt;
  35. int sizeOpt;
  36. LongOpts(const MyOpt opts[], const int size);
  37. void GetOptions(struct option *opts, std::string &shorts);
  38. MyOpt GetOption(char ch, int index);
  39. };
  40. class VendorIf {
  41. public:
  42. virtual void OnEvent(void *args) = 0;
  43. virtual void OnTimer(void *args) = 0;
  44. virtual void OnShot(void *args) = 0;
  45. };
  46. class VendorBase {
  47. public:
  48. VendorBase();
  49. virtual ~VendorBase();
  50. static int32_t ParseOptionArgs(VendorBase *vendor, int argc, char *argv[]);
  51. void ListenSignal(int signal);
  52. int Exec();
  53. void Exit(int signal);
  54. uv_handle_t *AppendEvent(int fd, int ev, VendorIf *vif);
  55. uv_handle_t *AppendTimerEvent(int millionsecs, VendorIf *vif);
  56. uv_handle_t *AppendTimerEvent(
  57. int millionsecs, std::function<void()> timerFunc);
  58. void StopEvent(uv_handle_t *handle);
  59. protected:
  60. virtual int ParseCmdline(const std::string &optname, const std::string &optarg) = 0;
  61. virtual MyOpt *GetOpts() = 0;
  62. virtual int GetOptSize() = 0;
  63. virtual void Signal(int signal) {}
  64. public:
  65. virtual int Run() = 0;
  66. virtual std::string Name() = 0;
  67. virtual void Stop(int signal) = 0;
  68. static void SignalHandler(uv_signal_t *handle, int signum);
  69. private:
  70. uv_loop_t *uvLoop_;
  71. std::vector<uv_handle_t *> uvSignals_;
  72. };
  73. } // namespace vendor
  74. #endif // __VENDOR_VENDOR_BASE_H__