45 lines
1.2 KiB
C++
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
|