void middleman_event_handler::alteration(continuable* ptr, event_bitmask e, fd_meta_event etype) { native_socket_type fd; switch (e) { case event::read: fd = ptr->read_handle(); break; case event::write: { fd = ptr->write_handle(); break; } case event::both: { fd = ptr->read_handle(); auto wrfd = ptr->write_handle(); if (fd != wrfd) { CPPA_LOG_DEBUG("read_handle != write_handle, split " "into two function calls"); // split into two function calls e = event::read; alteration(ptr, event::write, etype); } break; } default: CPPA_CRITICAL("invalid bitmask"); return; } m_alterations.emplace_back(fd_meta_info(fd, ptr, e), etype); }
void alteration(const continuable_reader_ptr& ptr, event_bitmask e, fd_meta_event etype) { native_socket_type fd; switch (e) { case event::read: fd = ptr->read_handle(); break; case event::write: { auto wptr = ptr->as_io(); if (wptr) fd = wptr->write_handle(); else { CPPA_LOG_ERROR("ptr->downcast() returned nullptr"); return; } break; } case event::both: { fd = ptr->read_handle(); auto wptr = ptr->as_io(); if (wptr) { auto wrfd = wptr->write_handle(); if (fd != wrfd) { CPPA_LOG_DEBUG("read_handle != write_handle, split " "into two function calls"); // split into two function calls e = event::read; alteration(ptr, event::write, etype); } } else { CPPA_LOG_ERROR("ptr->downcast() returned nullptr"); return; } break; } default: CPPA_LOG_ERROR("invalid bitmask"); return; } m_alterations.emplace_back(fd_meta_info(fd, ptr, e), etype); }
void erase(const continuable_reader_ptr& ptr, event_bitmask e) { CPPA_LOG_TRACE("ptr = " << ptr.get() << ", e = " << eb2str(e)); alteration(ptr, e, fd_meta_event::erase); }
void middleman_event_handler::erase_later(continuable* ptr, event_bitmask e) { CPPA_LOG_TRACE(CPPA_ARG(ptr) << ", e = " << eb2str(e)); alteration(ptr, e, fd_meta_event::erase); }
void middleman_event_handler::add_later(continuable* ptr, event_bitmask e) { CPPA_LOG_TRACE(CPPA_ARG(ptr) << ", " << CPPA_TARG(e, eb2str) << ", socket = " << ptr->read_handle()); alteration(ptr, e, fd_meta_event::add); }