Beispiel #1
0
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;
		}
	}
}