IM/MS/pool/thread/ev_pool.h

45 lines
1.2 KiB
C++

//
// Created by dongl on 23-4-14.
//
#ifndef IM_EV_POOL_H
#define IM_EV_POOL_H
#include <tbb/tbb.h>
#include <map>
#include "event2/event.h"
#include "event2/bufferevent.h"
// 当前链接所属 base, 与, 当前链接的客户addr
typedef struct BelongToBase_currentAddr {
event_base* base;
sockaddr_in* addr;
} BBCA;
class ev_pool {
public:
explicit ev_pool(int size = 4);
void add_event_base();
void add_event_base(const std::function<void()>& function);
void add_event_bases(int num);
bool polling(bool poll = false);
void add_buffer_event(evutil_socket_t fd, bufferevent_data_cb readcb, bufferevent_data_cb writecb,
bufferevent_event_cb eventcb, short events, sockaddr_in* addr);
void add_event(evutil_socket_t fd, short events, event_callback_fn callback, void *callback_arg);
event_base* dispatching();
void ev_loop_exit(event_base* base);
void ev_base_exit(event_base* base);
void run();
void free();
private:
tbb::task_group m_pool;
std::vector<event_base*> m_ev_bases;
std::map<event_base*, bufferevent*> m_bevs;
int m_pool_max_size;
int m_pool_curr_size;
bool m_poll;
};
#endif //IM_EV_POOL_H