void connection_engine::dispatch() { proton_handler& h = *ctx_->engine_handler->messaging_adapter_; pn_collector_t* c = ctx_->collector; for (pn_event_t *e = pn_collector_peek(c); e; e = pn_collector_peek(c)) { if (pn_event_type(e) == PN_CONNECTION_INIT) { // Make the messaging_adapter issue a START event. proton_event(e, PN_REACTOR_INIT, 0).dispatch(h); } proton_event(e, pn_event_type(e), 0).dispatch(h); pn_collector_pop(c); } }
void events(ldp_connection_t *conn, pn_collector_t *coll) { pn_event_t *event; while((event = pn_collector_peek(coll))) { switch (pn_event_type(event)) { case PN_EVENT_NONE: break; case PN_CONNECTION_REMOTE_STATE: case PN_CONNECTION_LOCAL_STATE: process_connection(conn, event); break; case PN_SESSION_REMOTE_STATE: case PN_SESSION_LOCAL_STATE: process_session(conn, event); break; case PN_LINK_REMOTE_STATE: case PN_LINK_LOCAL_STATE: process_link(conn, event); break; case PN_LINK_FLOW: process_flow(conn, event); break; case PN_DELIVERY: process_delivery(conn, event); break; case PN_TRANSPORT: process_transport(conn, event); break; } pn_collector_pop(coll); } }
bool connection_engine::dispatch() { if (collector_.get()) { for (pn_event_t *e = pn_collector_peek(collector_.get()); e; e = pn_collector_peek(collector_.get())) { proton_event pe(e, container_); try { pe.dispatch(*handler_); } catch (const std::exception& e) { disconnected(error_condition("exception", e.what())); } pn_collector_pop(collector_.get()); } } return !(pn_transport_closed(unwrap(transport_))); }
static void pn_collector_drain(pn_collector_t *collector) { assert(collector); while (pn_collector_peek(collector)) { pn_collector_pop(collector); } assert(!collector->head); assert(!collector->tail); }