1
0

worker.h 974 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 message_change_card_display:task
  43. {
  44. uint64_t m_card_id;
  45. uint16_t m_display;
  46. };
  47. struct worker
  48. {
  49. virtual void stop()=0;
  50. virtual void request(task*tk)=0;
  51. virtual void broadcast(task*tk)
  52. {
  53. }
  54. virtual int num_thread()
  55. {
  56. return 1;
  57. }
  58. static worker*instance();
  59. };
  60. #endif