init
This commit is contained in:
52
Gateway/gateway/event/epoll_event.cc
Normal file
52
Gateway/gateway/event/epoll_event.cc
Normal file
@@ -0,0 +1,52 @@
|
||||
#include "StdAfx.h"
|
||||
#include "epoll_event.h"
|
||||
|
||||
#ifndef _MSC_VER
|
||||
EpollEvent::EpollEvent(GameClientMgr* cli_mgr) : BaseEvent(cli_mgr) {
|
||||
epollfd_ = 0;
|
||||
listen_fd_ = 0;
|
||||
}
|
||||
|
||||
|
||||
EpollEvent::~EpollEvent() {
|
||||
if (epollfd_) {
|
||||
close(epollfd_);
|
||||
}
|
||||
}
|
||||
bool EpollEvent::init(void) {
|
||||
epollfd_ = epoll_create(EPOLLEVENTS);
|
||||
return true;
|
||||
}
|
||||
void EpollEvent::RunOne(void) {
|
||||
int ret = epoll_wait(epollfd_, events_, EPOLLEVENTS, 0);
|
||||
for (int i = 0; i < ret; i++) {
|
||||
if (Client *ptr = (Client*)events_[i].data.ptr)
|
||||
{
|
||||
if (events_[i].events & EPOLLIN) {
|
||||
cli_mgr_->HandleReadEvent(ptr->GetFd(), ptr);
|
||||
} else if (events_[i].events & EPOLLOUT) {
|
||||
cli_mgr_->HandleWriteEvent(ptr->GetFd(), ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EpollEvent::AddReadFd(SOCKET fd, void *ptr) {
|
||||
struct epoll_event ev;
|
||||
ev.events = EPOLLIN;
|
||||
ev.data.ptr = ptr;
|
||||
epoll_ctl(epollfd_, EPOLL_CTL_ADD, fd, &ev);
|
||||
}
|
||||
|
||||
void EpollEvent::DelFd(SOCKET fd, void *ptr) {
|
||||
epoll_ctl(epollfd_, EPOLL_CTL_DEL, fd, NULL);
|
||||
}
|
||||
|
||||
void EpollEvent::AddWriteFd(SOCKET fd, void *ptr) {
|
||||
struct epoll_event ev;
|
||||
ev.events = EPOLLIN | EPOLLOUT;
|
||||
ev.data.ptr = ptr;
|
||||
epoll_ctl(epollfd_, EPOLL_CTL_MOD, fd, &ev);
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user