worker.h 882 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #ifndef _WORKER_HPP_
  2. #define _WORKER_HPP_
  3. #include <ev++.h>
  4. #include <atomic>
  5. #include <vector>
  6. struct task
  7. {
  8. uint32_t m_cmd_code;
  9. uint32_t m_hash_id;
  10. task(uint32_t hash_id,uint32_t cmd_code)
  11. :m_cmd_code(cmd_code)
  12. ,m_hash_id(hash_id)
  13. {
  14. }
  15. task()
  16. {}
  17. void destroy()
  18. {
  19. delete this;
  20. }
  21. template<typename T> const T&body()const
  22. {
  23. return *(T*)this;
  24. }
  25. template<typename T> T&body()
  26. {
  27. return *(T*)this;
  28. }
  29. template<typename T> static task*alloc()
  30. {
  31. return new T();
  32. }
  33. virtual ~task(){}
  34. };
  35. struct area_business;
  36. struct message_change_business:task
  37. {
  38. int area_id;
  39. std::atomic<int> ref_count;
  40. std::vector<area_business*> del_list,add_list,new_list;
  41. };
  42. struct worker
  43. {
  44. virtual void stop()=0;
  45. virtual void request(task*tk)=0;
  46. virtual void broadcast(task*tk)
  47. {
  48. }
  49. virtual int num_thread()
  50. {
  51. return 1;
  52. }
  53. static worker*instance();
  54. };
  55. #endif