/* Document-method: client_session_new * * AMQ_Connection#client_session_new -> AMQP_Session */ static VALUE con_client_session_new(VALUE self) { amq_connection_cls *const connection_obj=get_amq_connection_cls(self,1); amq_client_session_t *session = NULL; VALUE rb_session; if (connection_obj) { session = amq_client_session_new (connection_obj->connection); rb_session = create_amq_session_cls(session); } else { rb_raise(rb_eRuntimeError,"Could not connect to server"); } if (rb_block_given_p()) { rb_yield(rb_session); ses_client_session_destroy(rb_session); return Qtrue; } else { return rb_session ; } }
static VALUE rwire_amq_client_session_new(VALUE self) { amq_client_connection_t *connection = NULL; amq_client_session_t *session = NULL; VALUE rb_session = Qnil; Data_Get_Struct(self, amq_client_connection_t, connection); if (connection) { session = amq_client_session_new (connection); if (!session) rb_raise(eAMQError, "Failed to start a new session"); rb_session = Data_Wrap_Struct(cSession, 0, 0, session); } else rb_raise(rb_eRuntimeError, "Server connection is dead"); return (rb_session); }
inline openamq_t (const char *host_, const char *send_rk_, const char *receive_rk_, bool direct) { // Store routing keys. strncpy (send_rk, send_rk_, 256); strncpy (receive_rk, receive_rk_, 256); // Initialise iCL. icl_system_initialise (0, NULL); // Open a connection. icl_longstr_t *auth_data = amq_client_connection_auth_plain ("guest", "guest"); connection = amq_client_connection_new ( (char*) host_, "/", auth_data, "perf", 0, 30000); assert (connection); icl_longstr_destroy (&auth_data); // Switch into direct mode if required. if (direct) connection->direct = TRUE; // Open a channel. session = amq_client_session_new (connection); assert (session); // Create a private queue. amq_client_session_queue_declare ( session, 0, NULL, FALSE, FALSE, TRUE, TRUE, NULL); // Bind the queue to the exchange. amq_client_session_queue_bind (session, 0, NULL, "amq.direct", (char*) receive_rk, NULL); // Consume from the queue. amq_client_session_basic_consume ( session, 0, NULL, NULL, TRUE, TRUE, TRUE, NULL); }