EventPolloer
{
rhandlers;
whandlers;
register(fd,r,handler)
{
if(r)
{
rhandlers[fd] = handler;
}else
{
whandlers[fd] = handler;
}
}
poller()
{
events [];
fds = epoll_wait(events)
for(i...)
{
event[i]&EPOLLERR|EPOLLHUP?this->triggerError(fd)
event[i]&EPOLLIN? this->triggerRead(fd)
event[i]&EPOLLOUT? this->triggerWrite(fd)
}
}
triggerRead(fd)
{
trigger(fd,rhandlers)
}
triggerWrite(fd)
{
trigger(fd,whandlers)
}
triggerError(fd)
{
if(!triggerRead(fd))
triggerWrite(fd);
}
trigger(fd,handlers)
{
handlers[fd].handle();
}
}
转载于:https://my.oschina.net/invictuslee/blog/335769