SpiecsEngine
 
Loading...
Searching...
No Matches

◆ UpdateChannel()

void Spices::Net::EPollPoller::UpdateChannel ( Channel * channel)
overridevirtual

Update Channel and Update Poll.

Parameters
[in]channelChannel.

Implements Spices::Net::Poller.

Definition at line 58 of file EPollPoller.cpp.

59 {
60 const auto state = channel->GetPollState();
61
63 {
64 if (state == Channel::PollState::New)
65 {
66 SOCKET fd = channel->Fd();
67 m_Channels[fd] = channel;
68 }
69
70 channel->SetPollState(Channel::PollState::Added);
71 Update(EPOLL_CTL_ADD, channel);
72 }
73 else
74 {
75 SOCKET fd = channel->Fd();
76 if (channel->IsNoneEvent())
77 {
78 Update(EPOLL_CTL_DEL, channel);
79 channel->SetPollState(Channel::PollState::Deleted);
80 }
81 else
82 {
83 Update(EPOLL_CTL_MOD, channel);
84 }
85 }
86 }
void Update(int operation, Channel *channel) const
Update epoll with operation.
ChannelMap m_Channels
This Poller interested Channels.
Definition Poller.h:94

References Spices::Net::Channel::Added, Spices::Net::Channel::Deleted, Spices::Net::Channel::GetPollState(), Spices::Net::Channel::IsNoneEvent(), Spices::Net::Channel::New, and Spices::Net::Channel::SetPollState().