本文整理汇总了C++中corba::ORB_var::perform_work方法的典型用法代码示例。如果您正苦于以下问题:C++ ORB_var::perform_work方法的具体用法?C++ ORB_var::perform_work怎么用?C++ ORB_var::perform_work使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类corba::ORB_var
的用法示例。
在下文中一共展示了ORB_var::perform_work方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: policies
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
CORBA::Object_var poa_object =
orb->resolve_initial_references ("RootPOA");
if (CORBA::is_nil (poa_object.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize the POA.\n"),
1);
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (poa_object.in ());
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager ();
// Policies for the childPOA to be created.
CORBA::PolicyList policies (1);
policies.length (1);
CORBA::Any pol;
pol <<= BiDirPolicy::BOTH;
policies[0] =
orb->create_policy (BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE,
pol);
// Create POA as child of RootPOA with the above policies. This POA
// will receive request in the same connection in which it sent
// the request
PortableServer::POA_var child_poa =
root_poa->create_POA ("childPOA",
poa_manager.in (),
policies);
// Creation of childPOA is over. Destroy the Policy objects.
for (CORBA::ULong i = 0;
i < policies.length ();
++i)
{
policies[i]->destroy ();
}
poa_manager->activate ();
if (parse_args (argc, argv) != 0)
return 1;
Simple_Server_i server_impl (orb.in (),
no_iterations);
PortableServer::ObjectId_var id =
PortableServer::string_to_ObjectId ("simple_server");
child_poa->activate_object_with_id (id.in (),
&server_impl);
CORBA::Object_var obj =
child_poa->id_to_reference (id.in ());
CORBA::String_var ior =
orb->object_to_string (obj.in ());
ACE_DEBUG ((LM_DEBUG, "Activated as <%C>\n", ior.in ()));
// If the ior_output_file exists, output the ior to it
if (ior_output_file != 0)
{
FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
if (output_file == 0)
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot open output file for writing IOR: %s",
ior_output_file),
1);
ACE_OS::fprintf (output_file, "%s", ior.in ());
ACE_OS::fclose (output_file);
}
int retval = 0;
while (retval == 0)
{
// Just process one upcall. We know that we would get the
// clients IOR in that call.
CORBA::Boolean pending =
orb->work_pending();
if (pending)
{
orb->perform_work();
}
// Now that hopefully we have the clients IOR, just start
// making remote calls to the client.
retval = server_impl.call_client ();
}
//.........这里部分代码省略.........
示例2: sa
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
try
{
// ORB initialization boiler plate...
CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
ACE_Sig_Action sa ((ACE_SignalHandler) handler, SIGHUP);
for (;;)
{
ACE_Time_Value tv (5, 0);
orb->perform_work (tv);
ORBSVCS_DEBUG ((LM_DEBUG,
"Reconfig flag = %d\n",
ACE_Service_Config::reconfig_occurred ()));
if (ACE_Service_Config::reconfig_occurred ())
ACE_Service_Config::reconfigure ();
}
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception (argv[0]);
}
return -1;
}
示例3: while
int
ACE_TMAIN (int argc,
ACE_TCHAR *argv[])
{
try
{
// Initialize the ORB first.
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
CORBA::Object_var obj
= orb->resolve_initial_references ("RootPOA");
// Get the POA_var object from Object_var.
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (obj.in ());
PortableServer::POAManager_var mgr
= root_poa->the_POAManager ();
mgr->activate ();
// Initialize the AVStreams components.
TAO_AV_CORE::instance ()->init (orb.in (),
root_poa.in ());
int result =
RECEIVER::instance ()->init (argc,
argv);
if (result != 0)
return result;
while (endstream != 2)
{
orb->perform_work ();
}
// Hack for now....
ACE_OS::sleep (1);
orb->destroy ();
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("receiver::init");
return -1;
}
RECEIVER::close (); // Explicitly finalize the Unmanaged_Singleton.
return 0;
}
示例4: t
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
int result = 0;
try
{
CORBA::ORB_var orb = CORBA::ORB_init (argc, argv);
if (parse_args (argc, argv) != 0)
return 1;
ACE_DEBUG ((LM_DEBUG,"Client using ior source %s\n", ior));
CORBA::Object_var server = orb->string_to_object (ior);
CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var root =
PortableServer::POA::_narrow (obj.in());
PortableServer::POAManager_var pm = root->the_POAManager();
pm->activate();
bool got_reply = false;
Messaging::ReplyHandler_var callback = new DII_ReplyHandler(got_reply);
do_primary_test (server,callback);
for (int i = 0; i < 100 && !got_reply; i++)
{
ACE_Time_Value t(0,10000);
orb->perform_work(t);
}
if (do_shutdown)
result = do_shutdown_test (server);
ACE_DEBUG ((LM_DEBUG,"Shutting down and destrying ORB.\n"));
orb->destroy();
ACE_DEBUG ((LM_DEBUG,"ORB destroyed\n"));
}
catch (const ::CORBA::Exception &ex)
{
ex._tao_print_exception("ERROR : unexpected CORBA exception caugth :");
++result;
}
return result;
}
示例5: ACE_TMAIN
int ACE_TMAIN (int argc, ACE_TCHAR* argv[]) {
try {
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
if (parse_args (argc, argv) != 0)
return 1;
CORBA::Object_var obj = orb->string_to_object(ior);
Transaction_var trans = Transaction::_narrow(obj.in());
if (CORBA::is_nil(trans.in()))
throw std::runtime_error("failed to find a valid Transaction IOR");
Person_var p = new Person_i("TAOUser", 1000);
const char* n = p->name();
double bal = p->balance() / 100.0;
std::cout << "Client: Sending person:" << n
<< " starting_balance:$" << bal
<< std::endl;
CORBA::Long b = trans->update(p.in());
while (orb->work_pending()) {
orb->perform_work();
}
std::cout << "Client: Ending balance: " << b/100.0 << std::endl;
orb->destroy();
} catch(const CORBA::Exception& e) {
std::cerr << e << std::endl;
return 1;
}
catch (const std::runtime_error &e) {
std::cerr << e.what() << std::endl;
}
return 0;
}
示例6: policies
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
if (parse_args(argc, argv) != 0) {
return 1;
}
// Create a bidirectional POA
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj.in());
PortableServer::POAManager_var poa_manager = root_poa->the_POAManager();
// Policies for the childPOA to be created.
CORBA::PolicyList policies(1);
policies.length(1);
CORBA::Any pol;
pol <<= BiDirPolicy::BOTH;
policies[0] =
orb->create_policy(BiDirPolicy::BIDIRECTIONAL_POLICY_TYPE, pol);
// Create POA as child of RootPOA with the above policies. This POA
// will receive request in the same connection in which it sent
// the request
PortableServer::POA_var poa = root_poa->create_POA("bidirPOA", poa_manager.in(), policies);
// Creation of bidirPOA is over. Destroy the Policy objects.
for (CORBA::ULong i = 0; i < policies.length (); ++i) {
policies[i]->destroy ();
}
poa_manager->activate ();
PortableServer::Servant_var<Simple_i> svt = new Simple_i(orb.in(), callback_count);
// Register and activate Simple servant
PortableServer::ObjectId_var id = poa->activate_object(svt.in());
obj = poa->id_to_reference(id.in());
Simple_var server = Simple::_narrow(obj.in());
CORBA::String_var ior = orb->object_to_string(server.in());
if (ior_output_file != ACE_TEXT("")) {
std::ofstream outfile(ACE_TEXT_ALWAYS_CHAR(ior_output_file.c_str()));
outfile << ior.in();
}
std::cout << "Activated as " << ior.in() << std::endl;
// Our own special orb->run() that knows how to callback clients
while (true) {
// returns 1 as soon as it has successfully called back.
if (svt->call_client()) {
break;
}
// We don't want to check for work pending, because we really want
// to simulate a normal orb->run() while adding the ability to call
// our routine which calls back to the client.
orb->perform_work();
}
std::cout << "Event loop finished." << std::endl;
CORBA::Boolean etherealize = true, wait = true;
poa->destroy(etherealize, wait);
orb->destroy();
return 0;
}
catch(const CORBA::Exception& ex) {
std::cerr << "Caught CORBA::Exception: " << std::endl << ex << std::endl;
}
return 1;
}
示例7: AMI_Test_i
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
if (parse_args (argc, argv) != 0)
return 1;
A::AMI_Test_var server;
AMI_Test_i * servant =
new AMI_Test_i(orb.in());
PortableServer::ServantBase_var safe (servant);
server = servant->_this();
if (CORBA::is_nil (server.in ()))
{
ACE_ERROR_RETURN ((LM_ERROR,
"Object reference <%s> is nil.\n",
ior),
1);
}
// Activate POA to handle the call back.
CORBA::Object_var poa_object =
orb->resolve_initial_references("RootPOA");
if (CORBA::is_nil (poa_object.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize the POA.\n"),
1);
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (poa_object.in ());
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager ();
poa_manager->activate ();
// Main thread collects replies. It needs to collect
// <nthreads*niterations> replies.
number_of_replies = nthreads * niterations;
// Let the client perform the test in a separate thread
Client client (server.in (), niterations);
if (client.activate (THR_NEW_LWP | THR_JOINABLE,
nthreads) != 0)
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot activate client threads\n"),
1);
if (debug)
{
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) : Entering perform_work loop to receive <%d> replies\n",
number_of_replies.value ()));
}
// ORB loop.
while (number_of_replies > 0)
{
CORBA::Boolean pending = orb->work_pending();
if (pending)
{
orb->perform_work();
}
// On some systems this loop must yield or else the other threads
// will not get a chance to run.
ACE_OS::thr_yield();
}
if (debug)
{
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) : Exited perform_work loop Received <%d> replies\n",
(nthreads*niterations) - number_of_replies.value ()));
}
client.thr_mgr ()->wait ();
ACE_DEBUG ((LM_DEBUG, "threads finished\n"));
root_poa->destroy (1, // ethernalize objects
0 // wait for completion
);
orb->destroy ();
}
catch (const CORBA::Exception& ex)
{
//.........这里部分代码省略.........
示例8: ACE_DEBUG
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
try
{
// Initialize the ORB first.
CORBA::ORB_var orb = CORBA::ORB_init (argc,
argv);
int result =
parse_args (argc,
argv);
if (result == -1)
return -1;
// Make sure we have a valid <output_file>
output_file = ACE_OS::fopen (output_file_name,
"w");
if (output_file == 0)
ACE_ERROR_RETURN ((LM_DEBUG,
"Cannot open output file %s\n",
output_file_name),
-1);
else ACE_DEBUG ((LM_DEBUG,
"File Opened Successfully\n"));
CORBA::Object_var obj
= orb->resolve_initial_references ("RootPOA");
// Get the POA_var object from Object_var.
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (obj.in ());
PortableServer::POAManager_var mgr
= root_poa->the_POAManager ();
mgr->activate ();
// Initialize the AVStreams components.
TAO_AV_CORE::instance ()->init (orb.in (),
root_poa.in ());
Server server;
result =
server.init (argc,
argv);
if (result != 0)
return result;
while ( !done )
{
if ( orb->work_pending( ) )
{
orb->perform_work ();
}
}
orb->shutdown( 1 );
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("server::init");
return -1;
}
ACE_OS::fclose (output_file);
return 0;
}
示例9: client
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
if (parse_args (argc, argv) != 0)
return 1;
A::AMI_Test_var server;
CORBA::Object_var object =
orb->string_to_object (ior);
server = A::AMI_Test::_narrow (object.in ());
if (CORBA::is_nil (server.in ()))
{
ACE_ERROR_RETURN ((LM_ERROR,
"Object reference <%s> is nil.\n",
ior),
1);
}
// Activate POA to handle the call back.
CORBA::Object_var poa_object =
orb->resolve_initial_references("RootPOA");
if (CORBA::is_nil (poa_object.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Unable to initialize the POA.\n"),
1);
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (poa_object.in ());
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager ();
poa_manager->activate ();
// Let the client perform the test in a separate thread
Client client (server.in (), niterations);
if (client.activate (THR_NEW_LWP | THR_JOINABLE,
nthreads) != 0)
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot activate client threads\n"),
1);
// Main thread collects replies. It needs to collect
// <nthreads*niterations> replies.
number_of_replies = nthreads *niterations;
if (perform_work_flag)
{
if (debug)
{
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) : Entering perform_work loop to receive <%d> replies\n",
number_of_replies));
}
// ORB loop.
while (number_of_replies > 0)
{
CORBA::Boolean pending = orb->work_pending();
if (pending)
{
orb->perform_work();
}
}
if (debug)
{
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) : Exited perform_work loop\n"));
}
}
client.thr_mgr ()->wait ();
ACE_DEBUG ((LM_DEBUG, "threads finished\n"));
if (debug)
{
ACE_DEBUG ((LM_DEBUG,
"(%P|%t) : Received <%d> replies\n",
(nthreads*niterations) - number_of_replies));
}
if (shutdown_flag)
{
server->shutdown ();
}
//.........这里部分代码省略.........
示例10: owner_transfer
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
int idle_count = 0;
try
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
CORBA::Object_var poa_object =
orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (poa_object.in ());
if (CORBA::is_nil (root_poa.in ()))
ACE_ERROR_RETURN ((LM_ERROR,
" (%P|%t) Panic: nil RootPOA\n"),
1);
PortableServer::POAManager_var poa_manager = root_poa->the_POAManager ();
if (parse_args (argc, argv) != 0)
return 1;
Hello *hello_impl = 0;
ACE_NEW_RETURN (hello_impl,
Hello (orb.in ()),
1);
PortableServer::ServantBase_var owner_transfer(hello_impl);
PortableServer::ObjectId_var id =
root_poa->activate_object (hello_impl);
CORBA::Object_var object = root_poa->id_to_reference (id.in ());
Test::Hello_var hello = Test::Hello::_narrow (object.in ());
CORBA::String_var ior = orb->object_to_string (hello.in ());
// Output the IOR to the <ior_output_file>
FILE *output_file= ACE_OS::fopen (ior_output_file, "w");
if (output_file == 0)
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot open output file for writing IOR: %s\n",
ior_output_file),
1);
ACE_OS::fprintf (output_file, "%s", ior.in ());
ACE_OS::fclose (output_file);
poa_manager->activate ();
for (;;)
{
ACE_Time_Value tv (0, 500);
while (orb->work_pending (tv))
{
ACE_DEBUG ((LM_DEBUG, "Work pending\n"));
ACE_Time_Value tv2 (0, 500);
if (orb->work_pending (tv2))
{
ACE_Time_Value work_tv (0, 500);
orb->perform_work (work_tv);
}
}
++idle_count;
}
orb->destroy ();
}
catch (const CORBA::BAD_INV_ORDER&)
{
// Expected
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("Exception caught:");
return 1;
}
if (idle_count == 0)
{
ACE_ERROR_RETURN ((LM_ERROR, "ERROR: Got unexpected idle_count %d\n", idle_count), 1);
}
else
{
ACE_DEBUG ((LM_DEBUG, "Got %d idle moments\n", idle_count));
}
return 0;
}
示例11: while
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
CORBA::ORB_var orb;
try
{
// Initialize the ORB.
orb = CORBA::ORB_init(argc, argv);
// Initialize options based on command-line arguments.
int parse_args_result = client_parse_args(argc, argv);
if (parse_args_result != 0)
{
return 1;
}
CORBA::Object_var object =
orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (object.in ());
// Get an object reference from the nominated file
object = orb->string_to_object (server_ior);
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager();
poa_manager->activate();
Child_var child = Child::_narrow (object.in());
Reply_Handler reply_handler_servant;
PortableServer::ObjectId_var id =
root_poa->activate_object (&reply_handler_servant);
CORBA::Object_var object_act = root_poa->id_to_reference (id.in ());
AMI_ChildHandler_var reply_handler_object =
AMI_ChildHandler::_narrow (object_act.in ());
// Invoke the AMI parentMethod
child->sendc_parentMethod (reply_handler_object.in ());
// Loop until all replies have been received.
while (reply_handler_servant.reply_count () == 0)
{
orb->perform_work ();
}
// Shutdown server.
child->shutdown ();
orb->destroy ();
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("Exception caught:");
return 1;
}
return 0;
}
示例12: test_factory_i
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
try
{
CORBA::ORB_var orb =
CORBA::ORB_init (argc,argv);
CORBA::Object_var poa_object =
orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (poa_object.in ());
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager ();
if (parse_args (argc, argv) != 0)
return -1;
{
test_factory_i *servant =
new test_factory_i (orb.in ());
PortableServer::ServantBase_var safe_servant (servant);
ACE_UNUSED_ARG (safe_servant);
PortableServer::ObjectId_var id_act =
root_poa->activate_object (servant);
CORBA::Object_var object = root_poa->id_to_reference (id_act.in ());
test_factory_var test_factory =
test_factory::_narrow (object.in ());
CORBA::String_var ior =
orb->object_to_string (test_factory.in ());
FILE *output_file = ACE_OS::fopen (ior_output_file, "w");
if (output_file == 0)
ACE_ERROR_RETURN ((LM_ERROR,
"Cannot open output file for writing IOR: %s",
ior_output_file),
-1);
ACE_OS::fprintf (output_file, "%s", ior.in ());
ACE_OS::fclose (output_file);
}
poa_manager->activate ();
TAO_Root_POA *tao_poa = dynamic_cast <TAO_Root_POA*> (root_poa.in ());
while (!done)
{
CORBA::ULong outstanding_requests =
tao_poa->outstanding_requests ();
ACE_DEBUG ((LM_DEBUG,
"Number of outstanding requests before ORB::perform_work(): %d\n",
outstanding_requests));
ACE_ASSERT (outstanding_requests == 0);
orb->perform_work ();
// On some systems this loop must yield or else the other threads
// will not get a chance to run.
ACE_OS::thr_yield ();
}
}
catch (...)
{
ACE_ERROR_RETURN ((LM_ERROR,
"Failure: Unexpected exception caught\n"),
-1);
}
return 0;
}
示例13: sleep_interval
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
try
{
// Initialize the ORB.
CORBA::ORB_var orb =
CORBA::ORB_init (argc, argv);
// Initialize options based on command-line arguments.
int parse_args_result = parse_args (argc, argv);
if (parse_args_result != 0)
return parse_args_result;
CORBA::Object_var base =
orb->resolve_initial_references ("RootPOA");
PortableServer::POA_var root_poa =
PortableServer::POA::_narrow (base.in ());
// Get an object reference from the argument string.
base = orb->string_to_object (IOR);
PortableServer::POAManager_var poa_manager =
root_poa->the_POAManager ();
poa_manager->activate ();
// Try to narrow the object reference to a <test> reference.
test_var test_object = test::_narrow (base.in ());
Reply_Handler reply_handler_servant;
AMI_testHandler_var reply_handler_object = reply_handler_servant._this ();
if (setup_buffering)
{
setup_buffering_constraints (orb.in ());
}
for (CORBA::ULong i = 1; i <= iterations; ++i)
{
ACE_DEBUG ((LM_DEBUG,
"client: Iteration %d @ %T\n",
i));
if (invoke_ami_style)
{
// Invoke the AMI method.
test_object->sendc_method (reply_handler_object.in (),
i);
}
else
{
CORBA::ULong reply_number = 0;
// Invoke the regular method.
test_object->method (i,
reply_number);
ACE_DEBUG ((LM_DEBUG,
"client: Regular Reply %d @ %T\n",
reply_number));
}
// Interval between successive calls.
ACE_Time_Value sleep_interval (0,
interval * 1000);
orb->run (sleep_interval);
}
// Loop until all replies have been received.
while (!received_all_replies)
{
orb->perform_work ();
}
// Shutdown server.
if (shutdown_server)
{
test_object->shutdown ();
}
root_poa->destroy (1,
1);
// Destroy the ORB. On some platforms, e.g., Win32, the socket
// library is closed at the end of main(). This means that any
// socket calls made after main() fail. Hence if we wait for
// static destructors to flush the queues, it will be too late.
// Therefore, we use explicit destruction here and flush the
// queues before main() ends.
orb->destroy ();
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("Exception caught:");
return -1;
}
//.........这里部分代码省略.........
示例14: ACE_TMAIN
int ACE_TMAIN (int ac, ACE_TCHAR* av[]) {
try {
CORBA::ORB_var orb = CORBA::ORB_init(ac, av);
NodeFactory::register_new_factory(* orb.in());
BoxedValueFactory::register_new_factory(* orb.in());
BaseValueFactory::register_new_factory(* orb.in());
TValueFactory::register_new_factory(* orb.in());
ConfigValueFactory::register_new_factory(* orb.in());
CORBA::Object_var obj = orb->string_to_object(server_ior);
ValueServer_var tst = ValueServer::_narrow(obj.in());
ACE_ASSERT(! CORBA::is_nil(tst.in()));
// invoke operations and print the results
boxedLong* p1 = new boxedLong (774);
boxedLong* p2 = new boxedLong (775);
boxedString* s1 = new boxedString ("hello");
boxedString* s2 = new boxedString ("world");
boxedString* null = 0;
boxedValue* b = new OBV_demo::value::idl::boxedValue ();
b->b1 (p1);
b->b2 (p2);
boxedValue* bb = new OBV_demo::value::idl::boxedValue ();
bb->b1 (p1);
bb->b2 (p1);
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing two boxed values in one valuetype: %s\n",
tst->receive_boxedvalue (b)));
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing one boxed values twice in one valuetype: %s\n",
tst->receive_boxedvalue (bb)));
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing two integers: %s\n",
tst->receive_long (p1, p2)));
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing one integer twice: %s\n",
tst->receive_long (p1, p1)));
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing two strings: %s\n",
tst->receive_string (s1, s2)));
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing null: %s\n",
tst->receive_string (s1, null)));
Node* n4 = new OBV_demo::value::idl::Node (4, 0);
Node* n3 = new OBV_demo::value::idl::Node (3, n4);
Node* n2 = new OBV_demo::value::idl::Node (2, n3);
Node* n1 = new OBV_demo::value::idl::Node (1, n2);
n4->next(n1);
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing a list structure: %s\n",
tst->receive_list (n1)));
#if 1
TValue* t = new OBV_demo::value::idl::TValue ();
t->data (20);
t->basic_data (10);
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing inout truncatable: %s\n",
tst->receive_truncatable (t)));
if (t->data () != 21 || t->basic_data () != 11)
{
std::cerr << "Received incorrect truncatable data" << std::endl;
return 1;
}
#endif
const CORBA::ULong sz = 50;
::demo::value::idl::ConfigValues configs (sz);
configs.length (sz);
for (CORBA::ULong i = 0; i < sz; ++i)
{
configs[i] = new ConfigValueImpl ("IOR", IOR);
}
ACE_DEBUG ((LM_DEBUG, "(%P|%t)Passing sequence: %s\n",
tst->receive_sequence (configs)));
while (orb->work_pending()) {
orb->perform_work();
}
orb->destroy();
} catch(const CORBA::Exception& e) {
std::cerr << e << std::endl;
return 1;
}
return 0;
}
示例15: if
int
ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
try
{
int server_num = 0;
int die_on_ping = 1;
int ping_count = 0;
for (int i = 1; i < argc; i++)
{
ACE_TCHAR *c = argv[i];
if (ACE_OS::strcasecmp (ACE_TEXT ("-n"), c) == 0)
{
server_num = ACE_OS::atoi (argv[++i]);
}
else if (ACE_OS::strcasecmp (ACE_TEXT ("-?"),c) == 0)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("usage: %C ")
ACE_TEXT ("-n Number of the server\n"),
argv[0]));
return 1;
}
}
Server_ORBInitializer * temp_initializer;
ACE_NEW_RETURN (temp_initializer,
Server_ORBInitializer (&ping_count),
-1); // No exceptions yet!
PortableInterceptor::ORBInitializer_var initializer =
temp_initializer;
PortableInterceptor::register_orb_initializer (initializer.in ());
CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);
CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
PortableServer::POA_var root_poa = PortableServer::POA::_narrow(obj.in());
PortableServer::POAManager_var mgr = root_poa->the_POAManager();
ACE_CString poa_name_base = ACE_CString("TestObject_") + toStr (server_num);
PortableServer::POA_var test_poa;
test_poa = createPOA(root_poa.in (), true, poa_name_base.c_str ());
temp_initializer->set_poa (test_poa.in());
mgr->activate();
PortableServer::Servant_var<Test_i> test_servant =
new Test_i(server_num);
PortableServer::ObjectId_var object_id =
PortableServer::string_to_ObjectId("test_object");
//
// Activate the servant with the test POA,
// obtain its object reference, and get a
// stringified IOR.
//
test_poa->activate_object_with_id(object_id.in(), test_servant.in());
//
// Create binding between "TestService" and
// the test object reference in the IOR Table.
// Use a TAO extension to get the non imrified poa
// to avoid forwarding requests back to the ImR.
TAO_Root_POA* tpoa = dynamic_cast<TAO_Root_POA*>(test_poa.in());
obj = tpoa->id_to_reference_i(object_id.in(), false);
CORBA::String_var test_ior = orb->object_to_string(obj.in());
obj = orb->resolve_initial_references("IORTable");
IORTable::Table_var table = IORTable::Table::_narrow(obj.in());
table->bind(poa_name_base.c_str (), test_ior.in());
ACE_DEBUG ((LM_DEBUG, "Started Server %s \n",
poa_name_base.c_str()));
{
ACE_CString status_file = poa_name_base + ACE_CString(".status");
ofstream out(status_file.c_str ());
out << "started" << endl;
}
while (ping_count < die_on_ping)
{
orb->perform_work ();
}
root_poa->destroy(1,1);
orb->destroy();
}
catch(const CORBA::Exception& ex) {
ex._tao_print_exception ("Server main()");
return 1;
}
return 0;
//.........这里部分代码省略.........