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);
}
Ejemplo n.º 2
0
 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);
 }
Ejemplo n.º 3
0
 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);
}