static VALUE _r2tao_set_request_arguments(CORBA::Request_ptr _req, VALUE arg_list) { long ret_val = 0; CORBA::ORB_var _orb = _req->target ()->_get_orb (); // clear all current args CORBA::ULong arg_num = _req->arguments ()->count (); while (arg_num > 0) _req->arguments ()->remove (--arg_num); if (arg_list != Qnil) { long arg_len = RARRAY (arg_list)->len; for (long a=0; a<arg_len ;++a) { VALUE argspec = rb_ary_entry (arg_list, a); VALUE argname = rb_ary_entry (argspec, 0); int _arg_type = NUM2INT (rb_ary_entry (argspec, 1)); CORBA::TypeCode_var _arg_tc = r2tao_Typecode_r2t (rb_ary_entry (argspec, 2), _orb. in()); //::printf("arg_name=%s; arg_type=%d\n", _arg_name, _arg_type); if (_arg_type != r2tao_OUT_ARG) { VALUE arg_val = rb_ary_entry (argspec, 3); char *_arg_name = argname != Qnil ? RSTRING (argname)->ptr : 0; CORBA::Any& _arg = (_arg_type == r2tao_IN_ARG) ? (_arg_name ? _req->add_in_arg (_arg_name) : _req->add_in_arg ()) : (_arg_name ? _req->add_inout_arg (_arg_name) : _req->add_inout_arg ()); if (_arg_type == r2tao_INOUT_ARG) ++ret_val; // assign value to Any r2tao_Typecode_Ruby2Any(_arg, _arg_tc.in (), arg_val, _orb.in ()); } else { ++ret_val; char *_arg_name = argname != Qnil ? RSTRING (argname)->ptr : 0; CORBA::Any& _arg = _arg_name ? _req->add_out_arg (_arg_name) : _req->add_out_arg (); // assign type info to Any r2tao_Typecode_Ruby2Any(_arg, _arg_tc.in (), Qnil, _orb.in ()); } } } return LONG2NUM (ret_val); }
void StandardConfiguratorImpl::configure(::Components::CCMObject_ptr comp) throw( Components::WrongComponentType ) { for(CORBA::ULong i = 0; i < config_.length(); i++ ) { DEBUG_OUT2( "\nStandardConfigurator: configure ", config_[i]->name() ); // create a request according to the wire format of attribute operations std::string operation = "_set_"; operation.append( config_[i]->name() ); CORBA::Request_ptr request = comp->_request( operation.c_str() ); request->add_in_arg() = config_[i]->value(); // send the request try { request->invoke(); } catch( CORBA::SystemException& ex ) { std::cerr << "StandardConfigurator: Unexpected System Exception" << &ex << std::endl; } // check for exceptions CORBA::Exception* ex = request->env()->exception(); if ( ex != 0 ) { std::cerr << "StandardConfigurator: Exception during configuration : " << ex << std::endl; } } }