Esempio n. 1
0
/* 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 ;
  }
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
        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);
        }