inline virtual size_t receive () { // Get next message; if none is available wait for it. amq_content_basic_t *content = amq_client_session_basic_arrived (session); if (!content) { // Wait while next message arrives. amq_client_session_wait (session, 0); // Exit the loop if Ctrl+C is encountered. // FIXME // if (!connection->alive) // assert (false); // Get the message. content = amq_client_session_basic_arrived (session); assert (content); } // Retrieve message size. size_t size = amq_content_basic_get_body_size (content); // Destroy the message. amq_content_basic_unlink (&content); return size; }
static VALUE rwire_amq_client_session_wait(VALUE self, VALUE timeout) { int result; amq_client_session_t *session = NULL; Data_Get_Struct(self, amq_client_session_t, session); if ( FIXNUM_P(timeout)) { result = amq_client_session_wait(session, FIX2INT(timeout)); return (INT2FIX(result)); } else { rb_raise(rb_eTypeError, "Timeout was not an Fixnum"); } }