messengerserver.cpp

来自「在使用TAO的通知服务过程中作为提供者于消费者的各种例程。」· C++ 代码 · 共 92 行

CPP
92
字号
#include <orbsvcs/CosNamingC.h>
#include "Messenger_i.h"
#include <ace/Get_Opt.h> 
#include <iostream>
#include <fstream>

const char* ior_output_file = 0;

int
parse_args (int argc, char *argv[])
{
  ACE_Get_Opt get_opts (argc, argv, "o:");
  int c;
  
  while ((c = get_opts ()) != -1)
    switch (c)
  {
      case 'o':
        ior_output_file = get_opts.optarg;
        break;
        
      case '?':
      default:
        std::cerr << "usage: " << argv[0] << " -o <ior>" << std::endl;
        return -1;
        break;
  }
  return 0;
}

int
main(int argc, char * argv[])
{
  try
     {
       // Initialize orb
       CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

       if (parse_args(argc, argv) != 0) {
         return 1;
       }

       // Find the Naming Service.       
       CORBA::Object_var rootObj =  orb->resolve_initial_references("NameService");
       CosNaming::NamingContext_var rootNC =
	        CosNaming::NamingContext::_narrow(rootObj.in());
       
       // Get the  Root POA.
       CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
       PortableServer::POA_var poa = PortableServer::POA::_narrow(obj.in());

       // Activate POA manager
       PortableServer::POAManager_var mgr = poa->the_POAManager();
       mgr->activate();

       // Create our Messenger servant.
       Messenger_i messenger_servant(orb.in());
       
       // Register it with the RootPOA.
       PortableServer::ObjectId_var oid = 
         poa->activate_object( &messenger_servant );
       CORBA::Object_var messenger_obj = poa->id_to_reference( oid.in() );

       // Generating the ior file is just for the purpose of synchronize the 
       // the startup of the server and consumer.
       CORBA::String_var ior = orb->object_to_string(messenger_obj.in());
       if (ior_output_file != 0) {
         std::ofstream outfile(ior_output_file);
         outfile << ior.in();
       }
       
       // Bind it in the Naming Service.
       CosNaming::Name name;
       name.length (1);
       name[0].id = CORBA::string_dup("MessengerService");
       rootNC->rebind(name, messenger_obj.in());

       // Accept requests
       orb->run(); 
       orb->destroy();

     }
  catch(const CORBA::Exception& ex) {
    std::cerr << ex << std::endl;
    return 1;
  }
  return 0;

}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?