vendor_base.h 1.9 KB

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