#ifndef _WORKER_HPP_ #define _WORKER_HPP_ #include <ev++.h> #include <atomic> #include <vector> struct task { uint32_t m_cmd_code; uint32_t m_hash_id; task(uint32_t hash_id,uint32_t cmd_code) :m_cmd_code(cmd_code) ,m_hash_id(hash_id) { } task() {} void destroy() { delete this; } template<typename T> const T&body()const { return *(T*)this; } template<typename T> T&body() { return *(T*)this; } template<typename T> static task*alloc() { return new T(); } virtual ~task(){} }; struct area_business; struct message_change_business:task { int area_id; std::atomic<int> ref_count; std::vector<area_business*> del_list,add_list,new_list; }; struct worker { virtual void stop()=0; virtual void request(task*tk)=0; virtual void broadcast(task*tk) { } virtual int num_thread() { return 1; } static worker*instance(); }; #endif